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