XSLT查找兄弟节点是否存在

7
以下是示例XML文件。
<mapNode>
      <mapNode>...</mapNode>
      <mapNode>...</mapNode>-----I am here at 2
      <mapNode>...</mapNode>
      <mapNode>...</mapNode>
</mapNode>
<mapNode>
      <mapNode>...</mapNode>
      <mapNode>...</mapNode>
</mapNode>

我想知道第3个位置是否存在。请帮忙。
提前致谢。
3个回答

22
如果你想测试一个元素后面是否有兄弟元素,你可以使用一个很明智命名的“following-sibling” XPath 表达式:
<xsl:if test="following-sibling::*" />

请注意,这将测试是否存在任何后续兄弟节点。如果您只想测试 mapNode 元素,可以使用以下方法:

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

但是,在以下情况下也同样适用,因为following-sibling将查看所有后续兄弟元素:

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

如果你想检查最接近的兄弟节点是否是一个 mapNode 元素,你可以这样做:

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

2
除了 @rene 的答案之外,您还可以在任何 mapNode 中使用 following-sibling 轴:
<xsl:template match="mapNode">
    <xsl:if test="count(following-sibling::mapNode)>0">
    <!-- has a successor -->
    </xsl:if>
</xsl:template>

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接