Xpath兄弟条件测试?

时间:2008-12-13 21:17:39

标签: xml xpath

我正在使用VB.net(2003),并在xml文档上调用SelectNodes方法 如果我有一份文件:

<InqRs>  
  <DetRs>  
    <RefInfo>  
      <RefType>StopNum</RefType>  
      <RefId>0</RefId>  
    </RefInfo>  
    <RefInfo>  
      <RefType>Id</RefType>  
      <RefId>0</RefId>  
    </RefInfo>  
  </DetRs>  
  <DetRs>  
    <RefInfo>  
      <RefType>StopNum</RefType>  
      <RefId>0</RefId>  
    </RefInfo>  
    <RefInfo>  
      <RefType>Id</RefType>  
      <RefId>1</RefId>  
    </RefInfo>  
  </DetRs>  
</InqRs>

如何选择仅包含DetRsRefType=Id的{​​{1}},即上面的“第一个”?

我尝试了几种不同的尝试,其中包括:

RefId=0

但是这些选择了两个DetRs部分(因为StopNum RefId为0,我推测)。

2 个答案:

答案 0 :(得分:3)

您希望顶级元素的所有 DetRs 子项:

/*/DetRs

有一个 RefInfo 孩子:

/*/DetRs
[RefInfo]

RefType ,其值为“ Id ”:

/*/DetRs
[RefInfo
[RefType = 'Id']
]

并且 RefId 的值 0

/*/DetRs
[RefInfo
[RefType = 'Id'
and {
{1}} = 0
]
]

此XPath表达式正确选择了所提供的XML文档中所需的第一个RefId元素

当然,如果某人有其他风格偏好,上述表达也可以写成:

<强> DetRs

答案 1 :(得分:1)

像这样。您不需要XPath表达式中的顶级InqR,尽管它没有受到伤害。您可能也不关心DetR,但假设您这样做,您想说“给我具有以下规范的Refinfo元素的父级”

DetRs/Refinfo[RefType='Id' and RefId='0']/..