我正在使用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>
这似乎不起作用。文本仍然在那里。关于如何解决此问题的任何建议?谢谢您的帮助。
答案 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