2009-09-24 18 views
9

Używam .Net 2.0, i muszę z mojego XmlDocument, niezależnie od przestrzeni nazw, jako źle na czele, jak może brzmieć.SelectSingleNode bez przestrzeni nazw

za szczególne

XmlElement slipType = (XmlElement)document.SelectSingleNode("//Provenance1"); 

ustawi slipType null ponieważ don'l wiem th nazw Provenance1 jest w momencie zapytania.

Odpowiedz

22

Można sprawdzić local-name elementu i zignorować nazw z następującego wyrażenia XPath.

//*[local-name()='Provenance1'] 
+0

Kolejny przykład komplikowania najprostszych rzeczy przez tak zwanych programistów z Microsoft. – TomeeNS

0

Spróbuj:

XmlElement slipType = (XmlElement)document.SelectSingleNode("//*:Provenance1"); 

Lub:

XmlElement slipType = (XmlElement)document.SelectSingleNode("//@*:Provenance1"); 

dla atrybutów ...

Niestety, ta konstrukcja będzie działać tylko z XPath 2.0, natomiast .NET używa tylko XPath 1.0. I przypadkowo testowane powyżej kodu z 2,0 parsera, więc to nie działa)

+0

To rzuca XPathException // *: Provenance1 ma nieprawidłowy token. –

+0

Testowałem to z .NET 3.5, gdzie również się zawiesił. Jednak jest to poprawna konstrukcja XPath. Niestety dla XPath 2.0, który testowałem. Ale .NET używa tylko XPath 1.0 i jest mało prawdopodobne .NET będzie obsługiwał 2.0 ... –

Powiązane problemy