我試圖找到一種方法來索引包含特定類型的子節點的節點,並讓它們從每找到一個子節點就會增加一個。我嘗試使用count(),但是這顯示了我的代碼中節點的位置,而不是找到的子節點的索引。在其他語言中,我會使用一個變量,但這不是XSLT中的一個選項。
我已經閱讀了使用模板的遞歸計數的一些示例,但是我不熟悉XSLT將其集成到我現有的代碼中。如何索引/計數包含子節點的節點,格式爲1,2,3,4 4
XML
<?xml version="1.0" encoding="UTF-8"?>
<entry>
<node>
<subnodeA>test_subnodeA1</subnodeA>
<subnodeB>test_subnodeB1</subnodeB>
</node>
<node>
<subnodeA>test_subnodeA2</subnodeA>
<subnodeB>test_subnodeB2</subnodeB>
</node>
<node>
<subnodeA>test_subnodeA3</subnodeA>
</node>
<node>
<subnodeA>test_subnodeA4</subnodeA>
<subnodeB>test_subnodeB3</subnodeB>
</node>
</entry>
XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<!-- Initial usage -->
<xsl:for-each select="node">
<xsl:value-of select="subnodeA"/>
<xsl:if test="subnodeB != ''">
<xsl:value-of select="position()"/>
</xsl:if>
</xsl:for-each>
<!-- Second usage -->
<xsl:for-each select="node">
<xsl:if test="subnodeB != ''">
<xsl:value-of select="position()"/>.
<xsl:value-of select="subnodeB"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
我想用我的方法來顯示類似
test_subnodeA1 1
test_subnodeA2 2
test_subnodeA3
test_subnodeA4 3
1 test_subnodeB1
2 test_subnodeB2
3 test_subnodeB3
但我只能得到
test_subnodeA1 1
test_subnodeA2 2
test_subnodeA3
test_subnodeA4 4
1 test_subnodeB1
2 test_subnodeB2
4 test_subnodeB3
某些條目有沒有subnodeB,然後用一個節點的幾個節點,所以我的名單開始在3,4或5
好問題,+1。根據我的答案,最簡單的解決方案根本不需要任何明確的條件邏輯和任何特殊的軸/函數。 –
@empo注意到,我最初並沒有正確理解這個問題。從那時起我糾正了我的答案,現在解決方案是正確的,仍然不涉及任何明確的條件,軸,'xsl:for-each'。 –