2

1つ、つまりdocbodyを除いて、xml内のすべてのノードを照合したいと思います。何かのようなもの

<xsl:template match="@*|node()[not(docBody)]" name="identity">
<xsl:copy>
  <xsl:apply-templates select="@*|node()">
</xsl:copy>
</xsl:template>

どうすればこれを達成できますか、上記の方法を試しました。

4

3 に答える 3

4

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>
于 2013-03-20T14:11:42.160 に答える
4

これ以外のすべてに一致し(追加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>
于 2013-03-20T14:13:24.423 に答える
0

はい、あなたは単にこれをする必要があります:

<xsl:template match="@*|node()[not(self::docBody)]" name="identity">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()">
  </xsl:copy>
</xsl:template>
于 2013-03-20T14:09:49.783 に答える