没有命名空间的 SelectSingleNode

20

我正在使用.Net 2.0,并且需要从我的XmlDocument选择不考虑命名空间的SelectSingleNode,尽管这听起来可能是错误的。

具体来说:

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

由于我在查询时不知道 Provenance1 命名空间的情况,因此将 slipType 设置为 null。

2个回答

41
你可以使用以下XPath表达式检查元素的本地名称并忽略命名空间:
//*[local-name()='Provenance1']

0

尝试:

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

或者:

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

对于属性...

不幸的是,这种构造只适用于XPath 2.0,而.NET仅使用XPath 1.0。我不小心使用了一个2.0解析器测试了上面的代码,所以它不能工作。)


这会抛出一个XPathException //*:Provenance1有一个无效的标记。 - Ralph Shillington
我已经在.NET 3.5上进行了测试,结果它也崩溃了。然而,这是一个有效的XPath构造。不幸的是,对于我所测试的XPath 2.0来说却不是这样。但是.NET仅使用XPath 1.0,而且.NET支持2.0的可能性很小... - Wim ten Brink

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,