2

XSLT でタグを削除したいのですが、すべてそのままにしておきます。

私はこのソースを持っています:

<?xml version="1.0" encoding="UTF-8"?>
<DOCUMENT>
    <div>
        <p>foo</p>
        <div>we want any divs found in here</div>
        <p>we want to keep everything</p>
        <p>except the div that follows DOCUMENT</p>
    </div>
</DOCUMENT>

そして、この出力が欲しい:

<?xml version="1.0" encoding="UTF-8"?>
<DOCUMENT>
        <p>foo</p>
        <div>we want any divs found in here</div>
        <p>we want to keep everything</p>
        <p>except the div that follows DOCUMENT</p>
</DOCUMENT>

不要な<div>ものは常に続き、それは私が削除したかっ<DOCUMENT>た唯一のものです。<div>

このXSLTでこれを行うことができます

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

<xsl:template match="/DOCUMENT/div">
        <xsl:apply-templates select="@*|node()"/>
</xsl:template>

</xsl:stylesheet>

問題: プッシュではなく「プル」変換を行っているため、identity-transform テンプレートでこれを実行したくありません。しかし、私は代替案を見つけるのに困惑しています。

4

1 に答える 1

4

プル スタイルシートを使用している場合、DOCUMENTS/div の下のすべての要素を単純に選択するのが最も簡単な方法ではないでしょうか。

例:

<xsl:template match="/">
<DOCUMENT>
    <xsl:for-each select="DOCUMENT/div/*">
    <xsl:copy-of select="."/>
    </xsl:for-each>
</DOCUMENT>
</xsl:template>

これを試すと、次の結果が得られます。

<DOCUMENT>
<p>foo</p>
<div>we want any divs found in here</div>
<p>we want to keep everything</p>
<p>except the div that follows DOCUMENT</p>
</DOCUMENT>
于 2013-05-08T13:55:12.687 に答える