2009-09-24 46 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