2009-10-16 9 views
6

Ho un documento XML che carico e provo a cercare con XPath. Il nodo radice in questo file è <t:Transmission xmlns:t='urn:InboundShipment'> e l'estremità del file viene chiusa correttamente con </t:Transmission>.Analisi XML: i due punti nel mio elemento fanno sì che XPath non riesca a vederlo.

Il mio problema è che non posso camminare sull'albero senza utilizzare un asse discendente. In altre parole, posso fare: SelectSingleNode("//TransactionHeader[SHIPPERSTATE='CA']") e ottenere un nodo in cambio. Ma non posso fare quello che dovrebbe essere l'equivalente: SelectSingleNode("/Transmission/TransmissionBody/Transaction/TransactionHeader[SHIPPERSTATE='CA']")

Se rimuovo il t: posso fare una ricerca XPath su /Transmission e ottenere l'intero file. Con lo t: lì ho appena ricevuto nulla. O se provo SelectSingleNode("t:Transmission") Ottengo un errore con la mia istruzione XPath.

Generalmente non ho bisogno di interrogare l'elemento radice, quindi dovrei essere in grado di accontentarmi di usare solo l'asse discendente per le mie ricerche. Ma l'XML sembra valido per me e quindi mi piacerebbe sapere come affrontarlo. Inoltre, non voglio chiedere al cliente di rimuovere "t:" solo perché non so come gestirlo.

risposta

8

Il "t:" è un prefisso del namespace, che è associato allo spazio dei nomi 'urn: InboundShipment.' Per gestirlo correttamente, devi dire a C# a cosa è associato il prefisso. This page dovrebbe spiegare come utilizzare System.Xml.XmlNamespaceManager per gestire lo spazio dei nomi.

Modifica: Vedere this answer, pure.

+0

Fantastico, grazie James! Ottimi riferimenti anche. –

Problemi correlati