2 Stimmen

Xpath Geschwister bedingte Tests?

Ich verwende VB.net (2003) und rufe die SelectNodes-Methode für ein Xml-Dokument auf.
Wenn ich ein Dokument habe:

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

Wie kann ich nur für die DetRs Das hat RefType=Id y RefId=0 d.h. die "erste" oben?

Ich habe verschiedene Versuche unternommen, unter anderem:

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

Diese wählen jedoch beide DetRs-Abschnitte aus (aufgrund der StopNum RefId von 0, nehme ich an).

3voto

Dimitre Novatchev Punkte 234995

Sie wollen alle DetRs Kinder des obersten Elements:

    /*/DetRs

die einen RefInfo Kind:

    /*/DetRs
             [RefInfo]

Das hat RefType mit dem Wert " Id ":

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

und das hat eine RefId mit Wert 0 :

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

Und dieser XPath-Ausdruck wählt korrekt nur den gewünschten ersten DetRs Element in dem bereitgestellten XML-Dokument .

Wenn jemand andere stilistische Vorlieben hat, könnte der obige Ausdruck natürlich auch so geschrieben werden:

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

1voto

Toby White Punkte 1335

Zum Beispiel so. Sie brauchen die InqRs der obersten Ebene nicht in Ihrem XPath-Ausdruck, aber es schadet nicht. Die DetRs sind Ihnen vielleicht auch egal, aber wenn Sie sie brauchen, wollen Sie sagen: "Gib mir das übergeordnete Element des Refinfo-Elements, das die folgende Spezifikation hat".

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X