<span></span><span></span><span></span>
に変換するが<span><span><span></span></span></span>
、変換しない原因は何<span>a</span><span>a</span><span>a</span>
ですか?
質問する
81 次
1 に答える
1
使用:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()[1]|@*"/>
</xsl:copy>
<xsl:apply-templates select="following-sibling::node()[1]"/>
</xsl:template>
<xsl:template match="span[not(node())]">
<span>
<xsl:apply-templates select="following-sibling::*[1][self::span[not(node())]]"/>
</span>
</xsl:template>
</xsl:stylesheet>
この変換が次のドキュメント(整形式の XML ドキュメントになるように、単一の最上位要素にラップされた、提供されたフラグメント) に適用される場合:
<p>
<span></span><span></span><span></span>
</p
必要な正しい結果が生成されます。
<p>
<span>
<span>
<span/>
</span>
</span>
</p>
また、必要に応じて、同じ変換 (上記) をこの XML ドキュメントに適用すると、次のようになります。
<p>
<span>a</span><span>a</span><span>a</span>
<span></span><span></span><span></span>
</p>
span
結果は、子ノードを持つ要素を「そのまま」保持します。
<p>
<span>a</span>
<span>a</span>
<span>a</span>
<span>
<span>
<span/>
</span>
</span>
</p>
説明:
すべてのノードを「そのまま」コピーし、一度に 1 つのノードだけをコピーする「きめの細かい」アイデンティティ ルールを使用します。
span
子ノードを持たない要素の詳細な ID テンプレートをオーバーライドする単一のテンプレートがあります。要素を再作成し、空のspan
要素でもある最初の兄弟を処理します。
于 2012-11-09T03:49:33.413 に答える