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