如何查找SPACE并仅在COMMENT文本中替换所需的文本

时间:2014-09-23 09:37:24

标签: xslt

请建议,如何在评论文本中查找并替换''(空格)到'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>

1 个答案:

答案 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>