2017-02-27 2 views
1

Ich versuche, den richtigen XPath zu erstellen, um einen Knoten basierend auf einer Bedingung zu erhalten, die nicht Teil des XPath ist, der mit der Methode in C# ausgewählt wird.XPath mit anderem Knotenpfad

Also sagen wir, ich habe das folgende XML.

<Root> 
    <Parties> 
     <Party> 
      <Person> 
       <Name>Bob Smith</Name> 
      </Person> 
      <Role> 
       <Type>Borrower</Type> 
      </Role> 
     </Party> 
     <Party> 
      <Person> 
       <Name>Mary Smith</Name> 
      </Person> 
      <Role> 
       <Type>CoBorrower</Type> 
      </Role> 
     </Party> 
    </Parties> 
</Root> 

Also, was ich bekommen wollen, ist der Wert von

//Root/Parties/Party/Person/Name 

wo

//Root/Parties/Party/Role/Type 

ist 'Borrower'.

Basierend auf meinen Recherchen vor dem Posten der Frage dachte ich, das folgende könnte funktionieren, aber kein Glück.

XDocument xDoc = XDocument.Parse(xml); 
var elm = xDoc.XPathSelectElement("//Root/Parties/Party[./Role/[Type = 'Borrower']/Person/Name"); 

Aber dieser Code gibt mir die folgende Ausnahme:

Eine nicht behandelte Ausnahme des Typs 'System.Xml.XPath.XPathException' aufgetreten in System.Xml.dll
Zusätzliche Informationen: Ausdruck muss zu einem node-set auswerten.

+0

'// Name [./ folgende :: Type =" Borrower "]' – Andersson

Antwort

2

verwenden XPath-Ausdruck:

//Root/Parties/Party[Role/Type/text() = 'Borrower']/Person/Name 

Es gibt Ihnen das gewünschte Ergebnis

Bob Smith 
0

Oder versuchen diese:

//Type[.="Borrower "]/parent :: node()/Vorgänger-Geschwister :: node() // Name