1

我正在尝试解决一个简单的计算但失败了。我正在使用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>

我必须为此使用正则表达式还是我可以any functions通过它来做到这一点。我不能使用 XSLT 2.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>
4

1 回答 1

1

您的 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>
于 2013-08-06T16:04:15.083 回答