Gå til innhold

[Løst] XML, XPath og XML-namespaces


Anbefalte innlegg

Jeg har denne order.xml fila som jeg får fra et 3. parts-system (kraftig forenklet).:

<?xml version="1.0" encoding="utf-8" ?> 
<Order xmlns="rrn:org.xcbl:schemas/xcbl/v3_5/xcbl35.xsd" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation="rrn:org.xcbl:schemas/xcbl/v3_5/xcbl35.xsd XCBL35.xsd">
 <OrderHeader>
<OrderParty>
  <BuyerParty>
	<Party>
	  <PartyID>
		<Identifier>
		  <Agency>
			<AgencyCoded>FI-TB</AgencyCoded>
		  </Agency>
		</Identifier>
	  </PartyID>
	</Party>
  </BuyerParty>
</OrderParty>
 </OrderHeader>
</Order>

Jeg skal ha tak i <AgencyCoded>-nodens property "InnerText", dvs verdien "FI-TB".

Hvordan gjør jeg dette med Xpath med tanke på de namespacene som er definert helt øverst?

 

XmlDocument xd = new XmlDocument();
xd.Load(@"C:\order.xml");
string val = xd.SelectSingleNode("/Order/OrderHeader/OrderParty/BuyerParty/Party/PartyID/Identifier/" + "Agency/AgencyCoded").InnerText;

Får denne: "Object reference not set to an instance of an object."

 

Er det noen måte å skrive stien til noden jeg skal ha uten å ta hensyn til namespaces? Har prøvd å benytte XmlNamespaceManager og adde namespaces, men er litt usikker på syntaks på hvordan selve xpath-utrykket blir da.

 

Noen som har noen tips?

 

Å bruke .ChildNodes.Item(n).ChildNodes.(m)... osv er uaktuelt.

 

 

Edit:

Fikk det til til slutt:

XmlNamespaceManager xnm = new XmlNamespaceManager(xd.NameTable);
xnm.AddNamespace("rrn", xd.ChildNodes.Item(1).NamespaceURI);
string val = xd.SelectSingleNode("myXPathQuery", xnm).InnerText;

Hvert av nodenavnene måtte prefixes med, i dette tilfellet, "rrn:" i XPath-query.

Endret av Spartakus
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...