1つ、つまりdocbodyを除いて、xml内のすべてのノードを照合したいと思います。何かのようなもの
<xsl:template match="@*|node()[not(docBody)]" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
</xsl:copy>
</xsl:template>
どうすればこれを達成できますか、上記の方法を試しました。
docBody
一致条件には、「要素の子を持たないノード」と表示されます。これは、docBody
要素自体ではないこととは異なります。あなたはこれを求めている:
<xsl:template match="@*|node()[not(self::docBody)]" name="identity">
2つのテンプレートを使用する必要がありますが:
<xsl:template match="docBody"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
これ以外のすべてに一致し(追加self::
)、デフォルトのテンプレートを上書きしますdocBody
(これがないと、内容docBody
は引き続き印刷されます)。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<xsl:template match="@*|node()[not(self::docBody)]" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- overwrite the default template -->
<xsl:template match="docBody">
</xsl:template>
</xsl:stylesheet>
はい、あなたは単にこれをする必要があります:
<xsl:template match="@*|node()[not(self::docBody)]" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
</xsl:copy>
</xsl:template>