Xml xsl:comment是否应用所有子元素?

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>

我想对包含“第1段”的段落以及子元素的输入做出评论

输入:

<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">&lt;!--</xsl:text>
        <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    <xsl:text disable-output-escaping="yes">--&gt;</xsl:text>
</xsl:template>

<xsl:template match="comment()[parent::para[contains(. , 'para 1')]]">
    <xsl:text disable-output-escaping="yes">&lt;!- -</xsl:text>
        <xsl:value-of select="."/>
    <xsl:text disable-output-escaping="yes">- -&gt;</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>