我正在尝试通过字符串中的XPath函数删除前导章节号,看起来像这样
<heading>Some Heading</heading>
<heading>some Heading 4 Something</heading>
<heading>Another One</heading>
<heading>For good Measure 2</heading>
我希望的输出看起来像这样
document.getElementById('name').focus();
到目前为止,我已经尝试了 translate()和 string-after(),但字符串内部或结尾处的数字正在扼杀我。 我很感激你的每一个帮助!
答案 0 :(得分:1)
如果您真的使用的是XSLT 2.0,请使用replace
<xsl:template match="heading">
<xsl:copy>
<xsl:value-of select="replace(., '^[\s.\d]+', '')"/>
</xsl:copy>
</xsl:template>
答案 1 :(得分:1)
这是一个纯XSLT 1.0解决方案(也使用XSLT 2.0处理器生成正确的结果):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"text()[number(translate(substring-before(., ' '), '.', ''))
= number(translate(substring-before(., ' '), '.', ''))]">
<xsl:value-of select="substring-after(., ' ')"/>
</xsl:template>
</xsl:stylesheet>
不使用RegEx的纯XSLT 2.0解决方案:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"text()[translate(substring-before(., ' '), '.', '') castable as xs:integer]">
<xsl:value-of select="substring-after(., ' ')"/>
</xsl:template>
</xsl:stylesheet>
在以下XML文档中应用上述任何转换时:
<t>
<heading>3 Some Heading</heading>
<heading>5.2.1 some Heading 4 Something</heading>
<heading>Another One</heading>
<heading>For good Measure 2</heading>
<heading>NoSpace</heading>
</t>
产生了想要的正确结果:
<t>
<heading>Some Heading</heading>
<heading>some Heading 4 Something</heading>
<heading>Another One</heading>
<heading>For good Measure 2</heading>
<heading>NoSpace</heading>
</t>