我不知道怎麼用記號化()函數正確是這種情況:XSLT 2記號化
輸入:
<RQ>
<Node1>
<Node2>
<Node3>VA</Node3>
<Node4>some value</Node4>
</Node2>
<Node2>
<Node3>PE</Node3>
<Node4>some value</Node4>
</Node2>
<Node2>
<Node3>VA|PE</Node3>
<Node4>some value</Node4>
</Node2>
</Node1>
</RQ>
所需的輸出:
<RQ>
<Node1>
<Node2>
<Node3>VA</Node3>
<Node4>some value</Node4>
</Node2>
<Node2>
<Node3>VA</Node3>
<Node4>some value</Node4>
</Node2>
</Node1>
</RQ>
說明: 我想標記化Node3的值並且只將那些Node3值等於'VA'的節點2元素複製到輸出。在上面的例子中,標記值爲'PE'的節點3應該被忽略。
用下面的變換:
<xsl:template match="/RQ/Node1/Node2/Node3">
<xsl:for-each select="tokenize(., '\|')">
<xsl:if test="current()='VA'">
<xsl:element name="Node3">
<xsl:copy-of select="current()"/>
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:template>
我能得到這樣的輸出:
<RQ>
<Node1>
<Node2>
<Node3>VA</Node3>
<Node4>some value</Node4>
</Node2>
<Node2>
<Node4>some value</Node4>
</Node2>
<Node2>
<Node3>VA</Node3>
<Node4>some value</Node4>
</Node2>
</Node1>
</RQ>
的事情是我不希望的中間節點2千萬在所有如果它不包含節點3 。
很好的解決方案。如果我不僅要處理VA,還要處理VB,VC,所以不能在最後一個模板中對其進行硬編碼? – pempek
@pempek我已經添加了一個如何處理「有趣」代碼列表的例子。 –