我想评论哪个段落包含'第1段'与输入以及子元素一样。
INPUT:
<root>
<section>
<title>aaaa</title>
<para>para 1 <i>italic</i></para>
</section>
<section>
<title>aaaa</title>
<para>para 2</para>
</section>
</root>
XSLT:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="para[contains(. , 'para 1')]">
<xsl:comment>
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:comment>
</xsl:template>
输出:
<section>
<title>aaaa</title>
<!--para 1 italic-->
</section>
所需的输出应该复制所有元素,因为它是注释中的输入:
<section>
<title>aaaa</title>
<!--<para>para 1 <i>italic</i></para>-->
</section>
答案 0 :(得分:1)
您可以使用disable-output-escaping处理此问题
switch
答案 1 :(得分:0)
您需要序列化para
元素,然后您可以将其标记放入注释中。使用Saxon 9.8任何版本或Altova 2017 R3或2018使用serialize
函数在XSLT 3 / XPath 3中支持序列化:
<xsl:template match="para[contains(. , 'para 1')]">
<xsl:comment select="serialize(.)"/>
</xsl:template>
就像
这样的输入<root>
<section>
<title>aaaa</title>
<para>para 1 <i>italic</i></para>
</section>
<section>
<title>aaaa</title>
<para>para 2</para>
</section>
<section>
<para>para 1 <i>italic</i> <!-- aa --> </para>
</section>
</root>
将9.8转换为
<root>
<section>
<title>aaaa</title>
<!--<para>para 1 <i>italic</i></para>-->
</section>
<section>
<title>aaaa</title>
<para>para 2</para>
</section>
<section>
<!--<para>para 1 <i>italic</i> <!- - aa - -> </para>-->
</section>
</root>
这与禁用 - 输出 - 转义方法相反,这将尝试为您提供格式良好的结果。我目前不确定如何获得可重新分析的格式。