请建议,如何在评论文本中查找并替换''(空格)到'SPACETEXT'。 (XSLT第2版)。
输入XML:
<root>
<para>First Text is <ceitalic>O</ceitalic><!--Text1 Text2 Text3 Text4--><!--Text6 Text7 Text8--><cesup>2</cesup></para>
<para>Second text is <ceitalic>H</ceitalic> <!--Text9--><!--Text10--><cesup>2</cesup></para>
</root>
XSLT:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="comment()/text()">
<xsl:analyze-string select="." regex="' '">
<xsl:matching-substring>
<xsl:choose>
<xsl:when test="regex-group(1)">SPACETEXT</xsl:when>
</xsl:choose>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
必需的输出:
<root>
<para>First Text is <ceitalic>O</ceitalic><!--Text1SPACETEXTText2SPACETEXTText3SPACETEXTText4--><!--Text6SPACETEXTText7SPACETEXTText8--><cesup>2</cesup></para>
<para>Second text is <ceitalic>H</ceitalic> <!--Text9--><!--Text10--><cesup>2</cesup></para>
</root>
答案 0 :(得分:2)
注释节点不能包含文本节点。所以,首先,匹配表达式应如下所示:
<xsl:template match="comment()">
此外,可以通过将xsl:analyze-string
替换为XPath replace()
函数来简化代码,如下所示:
<xsl:template match="comment()">
<xsl:comment>
<xsl:value-of select="replace(., ' ', 'SPACETEXT')"/>
</xsl:comment>
</xsl:template>