2009-10-16 8 views
6

Mam dokument XML, który ładuję i próbuję przeszukać XPath. Węzłem głównym w tym pliku jest <t:Transmission xmlns:t='urn:InboundShipment'>, a koniec pliku jest poprawnie zamknięty przy użyciu </t:Transmission>.Parsowanie XML: dwukropek w moim elemencie powoduje, że XPath go ominie

Moim problemem jest to, że nie mogę chodzić po drzewie bez użycia osi potomnej. Innymi słowy, mogę zrobić: SelectSingleNode("//TransactionHeader[SHIPPERSTATE='CA']") i uzyskać węzeł w zamian. Ale nie mogę zrobić, co powinno być równoważne: SelectSingleNode("/Transmission/TransmissionBody/Transaction/TransactionHeader[SHIPPERSTATE='CA']")

Po usunięciu t: mogę wykonać wyszukiwanie XPath na /Transmission i pobrać cały plik. Z t: tam po prostu dostaję zero. Lub jeśli próbuję SelectSingleNode("t:Transmission") pojawia się błąd z moją instrukcją XPath.

Generalnie nie muszę wysyłać zapytania do elementu głównego, więc powinienem być w stanie zrobić tylko przy użyciu osi potomnej dla moich wyszukiwań. Ale XML wygląda dla mnie ważnie i dlatego chciałbym się dowiedzieć, jak rozwiązać ten problem. Plus nie chcę prosić klienta o usunięcie "t:" tylko dlatego, że nie wiem jak sobie z tym poradzić.

Odpowiedz

8

"T:" to prefiks przestrzeni nazw, który jest powiązany z przestrzenią nazw "urn: InboundShipment". Aby poprawnie go obsłużyć, musisz powiedzieć C# o tym, z czym związany jest prefiks. This page powinien wyjaśnić, jak używać System.Xml.XmlNamespaceManager do obsługi przestrzeni nazw.

Edytuj: Zobacz także this answer.

+0

Niesamowite, dzięki James! Świetne referencje też. –