查找通过 XML 中标记的内容文本识别元素的元素的计数

问题描述 投票:0回答:1

我正在尝试查找父元素的位置或计数;当我们可以在包含文本的帮助下识别它的子元素时;下面是 xml:

<start>
<Item>
<ItemName>x</ItemName>
<ItemValue>x val</ItemValue>
</Item>
<Item>
<ItemName>y</ItemName>
<ItemValue>y val</ItemValue>
</Item>
<Item>
<ItemName>z</ItemName>
<ItemValue>z val</ItemValue>
</Item>
<Item>
<ItemName>y</ItemName>
<ItemValue>y val</ItemValue>
</Item>
<Item>
<ItemName>Head</ItemName>
<ItemValue>Head val</ItemValue>
</Item>
<Item>
<ItemName>Head1</ItemName>
<ItemValue>Head1 Val</ItemValue>
</Item>
<Item>
<ItemName>Head2</ItemName>
<ItemValue>Head2 Val</ItemValue>
</Item>
</start>

现在一旦我找到 /start/Item[ItemName='Head'] 这个,我想知道它的位置是什么,或者在这个 ItemName='Head' 之前有多少 '/start/Item' 这样我可以使用该计数/值/位置并进一步获取 Heads Head1、Head2 等...; ItemName Head 将是静态的,但 Head1、Head2 将是动态的。

我检查了使用下面我能够遍历到 ItemName Head

<xsl:if test="/start/Item[ItemName='Head'] "/> 

那我怎样才能达到目标呢?

更新

我试过下面的代码:

只是想在正文中打印计数,但没有用

<fo:block>
  <xsl:template match="start/Item[ItemName='Head']">
    Count <xsl:value-of select="count(preceding-sibling::Item)"/> 
  </xsl:template>
</fo:block>

我在这里遗漏了什么吗? 我对此很陌生,所以如果我在这里犯了非常基本的错误,我深表歉意

xslt-2.0 xsl-fo
1个回答
0
投票

在例如

<xsl:template match="start/Item[ItemName = 'Head']">
您可以选择例如
count(preceding-sibling::Item)
找出当前匹配的
Item
之前有多少个
Item
元素作为兄弟姐妹。

© www.soinside.com 2019 - 2024. All rights reserved.