Xml xsl:comment是否应用所有子元素?
我想对包含“第1段”的段落以及子元素的输入做出评论 输入:Xml xsl:comment是否应用所有子元素?,xml,xpath,xslt-2.0,Xml,Xpath,Xslt 2.0,我想对包含“第1段”的段落以及子元素的输入做出评论 输入: <root> <section> <title>aaaa</title> <para>para 1 <i>italic</i></para> </section> <section> <title>aaaa</title>
<root>
<section>
<title>aaaa</title>
<para>para 1 <i>italic</i></para>
</section>
<section>
<title>aaaa</title>
<para>para 2</para>
</section>
</root>
aaaa
第1段斜体
aaaa
第2段
XSLT:
输出:
<section>
<title>aaaa</title>
<!--para 1 italic-->
</section>
aaaa
所需输出所有元素都应复制为注释内的输入:
<section>
<title>aaaa</title>
<!--<para>para 1 <i>italic</i></para>-->
</section>
aaaa
您可以通过禁用输出转义来处理此问题
<xsl:template match="para[contains(. , 'para 1')]">
<xsl:text disable-output-escaping="yes"><!--</xsl:text>
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
<xsl:text disable-output-escaping="yes">--></xsl:text>
</xsl:template>
<xsl:template match="comment()[parent::para[contains(. , 'para 1')]]">
<xsl:text disable-output-escaping="yes"><!- -</xsl:text>
<xsl:value-of select="."/>
<xsl:text disable-output-escaping="yes">- -></xsl:text>
</xsl:template>
!--
--
!- -
- -
您需要序列化para
元素,然后将其标记放入注释中。XSLT 3/XPath 3支持使用Saxon 9.8任意版本进行序列化,或使用序列化
函数进行Altova 2017 R3或2018的序列化:
<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>
aaaa
第1段斜体
aaaa
第2段
第1段斜体
将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>
aaaa
aaaa
第2段
因此,与禁用输出转义方法相反,这将尝试为您提供格式良好的结果。不过,我目前不确定如何获得可重新解析的格式。谢谢@Rupesh。我这样做了,但我面临一个新的场景“评论”,已经在输入的段落中。[即第1段斜体]。那么它就不能生成格式良好的XML。@Amrendra,更新的答案。
<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>