使用document()时在XSLT中排除单个元素

时间:2019-01-22 21:03:48

标签: xslt nodes dita

我正在使用document()将XML文件(标记为DITA)的内容复制到变量中。这是我以前使用过的有效代码:

<xsl:variable name="fileContent">
    <xsl:copy-of select="document($fileSrc)"/>
</xsl:variable>

现在,我想包括<draft-comment>元素之外的所有内容。我试图按如下方式更改document():

<xsl:variable name="fileContent">
    <xsl:copy-of select="document($fileSrc)/*[not(draft-comment)]"/>
</xsl:variable>

这似乎不起作用。文本仍然在那里。关于如何解决此问题的任何建议?谢谢您的帮助。

1 个答案:

答案 0 :(得分:4)

使用mode属性创建两个模板;一个用于复制未更改的节点,另一个用于忽略draft-comment

<xsl:template match="@*|node()" mode="document">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" mode="document" />
    </xsl:copy>
</xsl:template>

<xsl:template match="draft-comment" mode="document" />

然后,您可以使用xsl:apply-templates代替xsl:copy-of

<xsl:variable name="fileContent">
   <xsl:apply-templates select="document($fileSrc)" mode="document" />
</xsl:variable>

请注意,xsl:copy-of进行了深层复制,只要没有名为draft-comment