2009-09-24 99 views
9

我正在使用.Net 2.0,並且需要從我的XmlDocument開始SelectSingleNode,無論名稱空間如何,因爲可能聽起來不正確。SelectSingleNode without namespace

要具體

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

將設置slipType爲空,因爲我知道don'l個命名空間Provenance1是在查詢的時間。

回答

22

可以檢查元件的local-name並用下面的XPath表達式忽略名稱空間:

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

另一個微軟所謂的程序員使最簡單的事情變得複雜的例子。 – TomeeNS 2017-07-11 15:38:12

0

嘗試:

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

或者:

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

的屬性...

不幸的是,這種結構將只使用XPath 2.0工作,而.NET只使用XPath 1.0中。我上面用2.0解析器代碼意外測試,所以它不工作)

+0

這將引發XPathException // *:Provenance1具有無效標記。 – 2009-09-29 13:25:34

+0

我用.NET 3.5測試過它,它也崩潰了。但是,這是一個有效的XPath構造。不幸的是,我測試過的XPath 2.0。但是,.NET只使用XPath 1.0,而.NET不太可能支持2.0 ... – 2009-09-29 20:01:43