拥有一个 XML 文档,我想要获取具有特定名称的第一个节点,无论它包含在哪个嵌套深度中。
我尝试了几件事但没有成功:
var node1 = doc.SelectSingleNode(@"//Shortcut");
var node2 = doc.SelectSingleNode(@"/*/Shortcut");
var node3 = doc.SelectSingleNode(@"//*/Shortcut");
var node4 = doc.SelectSingleNode(@"*/Shortcut");
...
每次调用都会产生一个NULL
node.
我认为这应该是一些简单的 XPath 语法。你能帮助我吗?
(如果这很重要:XML 文档是一个输入文件WiX http://wix.sourceforge.net/项目,因此可能涉及一些命名空间问题?!?)。
Edit
我还尝试了以下方法:
var nsm = new XmlNamespaceManager(doc.NameTable);
nsm.AddNamespace(string.Empty, @"http://schemas.microsoft.com/wix/2006/wi");
nsm.AddNamespace(@"ns", @"http://schemas.microsoft.com/wix/2006/wi");
和...一起:
var node1 = doc.SelectSingleNode(@"//Shortcut", nsm);
var node2 = doc.SelectSingleNode(@"/*/Shortcut", nsm);
var node3 = doc.SelectSingleNode(@"//*/Shortcut", nsm);
var node4 = doc.SelectSingleNode(@"*/Shortcut", nsm);
...
导致相同的结果。
编辑 2 - 解决方案
我找到了解决方案:
var nsm = new XmlNamespaceManager(doc.NameTable);
nsm.AddNamespace(string.Empty, @"http://schemas.microsoft.com/wix/2006/wi");
nsm.AddNamespace(@"ns", @"http://schemas.microsoft.com/wix/2006/wi");
and then
var node1 = doc.SelectSingleNode(@"//ns:Shortcut", nsm);
这成功了。