Xpath брат и сестра условное тестирование?

Я использую VB.net (2003) и вызываю метод SelectNodes для XML-документа.
Если у меня есть документ:

<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>

Как я могу выбрать только для того, DetRsкоторый имеет RefType=Idи RefId=0, т. Е. «Первый» выше?

Я пробовал несколько разных попыток, среди прочего:

InqRs/DetRs[RefInfo/RefType='Id' and RefInfo/RefId='0']  
InqRs/DetRs[RefInfo/RefType='Id'][RefInfo/RefId='0']  

Но они выбирают оба раздела DetR (из-за StopNum RefId, равного 0, я полагаю).

13.12.2008 21:17:38
@Mark: вы можете принять лучший ответ, нажав на (белую) галочку рядом с вашим вопросом.
Dimitre Novatchev 14.12.2008 18:48:20
2 ОТВЕТА

Вот так. Вам не нужны InqR верхнего уровня в выражении XPath, хотя это не повредит. Вы также можете не заботиться о DetR, но, если вы это сделаете, вы хотите сказать «дай мне родительский элемент для элемента Refinfo, который имеет следующую спецификацию»

DetRs/Refinfo[RefType='Id' and RefId='0']/..
1
13.12.2008 23:53:29

Вы хотите, чтобы все DetRsдети верхнего элемента:

    /*/DetRs

Что есть RefInfoребенок

    /*/DetRs
             [RefInfo]

Что имеет RefTypeзначение " Id":

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

и это имеет RefIdзначение 0 :

    /*/DetRs
             [RefInfo
                   [ RefType= ' Id'
                 and
                   RefId= 0
                   ]
              ]

И это выражение XPath правильно выбирает только первый DetRsэлемент в предоставленном XML-документе .

Конечно, если у кого-то есть другие стилистические предпочтения, вышеприведенное выражение можно записать также как:

    /*/DetRs[RefInfo[RefType='Id' and RefId=0]]

3
14.12.2008 18:44:40