使用XSLT-to-extarct链接拆分字符串



我试图解决一个简单的计算,但失败了。我正在使用XSLT 1.0。我有一个示例XML。

<root>
    <slide add_info="Retail" name="slide41.xml" nav_lvl_1="Link Slide" nav_lvl_2="" page_number="41">
        <Text>
            <links>Go for a test-drive, visit us online at http://google.com</links>
            <links>Also, visit our community pages to learn more:</links>
            <links>http://google.com/community/retail</links>
        </Text>
    </slide>
</root>

我想要split the string,其中第一部分是文本,第二部分是以http开头的链接。存在如上所示的情况,其中可能只存在文本而没有链接,或者只存在链接而没有文本。所以我要分开放text and link in separate nodes。例如:

    <root>
        <slide add_info="Retail" name="slide41.xml" nav_lvl_1="Link Slide" nav_lvl_2="" page_number="41">
            <split_1>
                 <link_text>Go for a test-drive, visit us online at </link_text>
                 <link_link>http://google.com</link_link>
            </split_1>
        </slide>
    </root>

我必须使用regex吗?或者我有any functions可以通过它来做到这一点。我不能使用XSLT2.0。

预期输出:

<w:p>
    <w:r>
        <w:t>Go for a test-drive, visit us online at </w:t>
    </w:r>
    <w:hyperlink r:id="rId7" w:history="1">
        <w:r w:rsidRPr="00E8727D">
            <w:rPr>
                <w:rStyle w:val="Hyperlink"/>
            </w:rPr>
            <w:t>http://google.com/</w:t>
        </w:r>
    </w:hyperlink>
</w:p>
<w:p>
    <w:r>
        <w:t>Also, visit our community pages to learn more:</w:t>
    </w:r>
</w:p>
<w:p>
    <w:hyperlink r:id="rId7" w:history="1">
        <w:r w:rsidRPr="00E8727D">
            <w:rPr>
                <w:rStyle w:val="Hyperlink"/>
            </w:rPr>
            <w:t>http://google.com/community/retail</w:t>
        </w:r>
    </w:hyperlink>
</w:p>

XSL应该包含一个类似以下的模板:

<xsl:template match="links">
     <xsl:if test="contains(text(), 'http:')">
         <split_1>
            <xsl:variable name="before">
                <xsl:value-of select="substring-before(text(), 'http:')"/>
            </xsl:variable>
            <link_text>
                <xsl:value-of select="$before"/>
            </link_text>
            <link_link>
                <xsl:value-of select="substring-after(text(), $before)" />
            </link_link>
        </split_1>
    </xsl:if>
</xsl:template>

相关内容

  • 没有找到相关文章

最新更新