すでに処理されたノードの処理を回避する方法はありますか?すでに処理されたノードの処理をスキップ
入力XML
<?xml version="1.0" encoding="UTF-8"?>
<root>
<node1>node1.1</node1>
<node2>node2.1</node2>
<node2>node2.2</node2>
<node1>node1.2</node1>
</root>
XSLあなたが見ることができるように
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="root">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="node1">
[Node1]:<xsl:value-of select="."></xsl:value-of>
<xsl:apply-templates select="following-sibling::node2"/>
[End node1]
</xsl:template>
<xsl:template match="node2">
[Node2]:<xsl:value-of select="."></xsl:value-of>
</xsl:template>
</xsl:stylesheet>
出力
<?xml version="1.0" encoding="UTF-8"?>
[Node1]:node1.1
[Node2]:node2.1
[Node2]:node2.2
[End node1]
[Node2]:node2.1
[Node2]:node2.2
[Node1]:node1.2
[End node1]
テンプレート<xsl:template match="node2">
はnode2要素ごとに2回適用されます.1回はnode1テンプレートから、2回目はXSLTプロセッサがnode2要素を変換するときです。
xsl:template match="node2"
2回目の適用を避ける方法はありますか? node2の処理を、node1のテンプレートで処理した直後に停止する必要があります。
重要 この例は、より複雑な使用例のエミュレーションです。 これは、追加の制限があることを意味しています。ルート要素の処理用にテンプレートを変更することはできません。
要素の処理を停止するか、処理を他の要素に移動する方法があるかどうかを知りたいと思います。
だから、とき* * 'node2'テンプレートを適用すべきか? 'node1'要素の前に現れる' node2'要素だけに? – AakashM