XSLT查找是否存在兄弟姐妹

时间:2012-09-24 11:17:40

标签: xslt xpath

示例XML如下所示。

<mapNode>
      <mapNode>...</mapNode>
      <mapNode>...</mapNode>-----I am here at 2
      <mapNode>...</mapNode>
      <mapNode>...</mapNode>
</mapNode>
<mapNode>
      <mapNode>...</mapNode>
      <mapNode>...</mapNode>
</mapNode>

我想知道位置3是否存在。 请帮帮我。

提前致谢。

3 个答案:

答案 0 :(得分:14)

如果你想测试一个元素后面是否有一个兄弟,你可以使用明智的名字“follow-sibling”xpath表达式:

<xsl:if test="following-sibling::*" />

请注意,这将测试是否有任何后续兄弟。如果您只想测试 mapNode 元素,则可以执行此操作

<xsl:if test="following-sibling::mapNode" />

然而,在下列情况下也是如此,因为跟随兄弟会看下面的所有兄弟姐妹:

<mapNode> 
   <mapNode>...</mapNode> 
   <mapNode>...</mapNode>-----I am here at 2 
   <differentNode>...</differentNode> 
   <mapNode>...</mapNode> 
</mapNode>

如果你想在兄弟之后立即检查 mapNode 元素,你可以这样做:

<xsl:if test="following-sibling::*[1][self::mapNode]" />

答案 1 :(得分:1)

除了@rene的回答,您还可以使用following-sibling内的mapNode轴:

<xsl:template match="mapNode">
    <xsl:if test="count(following-sibling::mapNode)>0">
    <!-- has a successor -->
    </xsl:if>
</xsl:template>

答案 2 :(得分:0)

不知道你已经拥有什么,但假设你有一个模板来选择一个顶层mapNode,你可以使用count来找出当前节点下有多少个mapNodes:

   <xsl:template match="/root/mapNode">
      <xsl:if test="count(mapNode)>2">
        more than two mapNodes
      </xsl:if>
    </xsl:template>