Spartakus Skrevet 15. januar 2008 Del Skrevet 15. januar 2008 (endret) 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 15. januar 2008 av Spartakus Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå