问题描述
有一个XML文件,我想要得到的第一个节点具有一定的名字,无论在哪个嵌套深度被遏制。
Having an XML document, I want to get the first node with a certain name, no matter in which nesting depth it is contained.
我试过几件事情,而不成功:
I tried several things without success:
var node1 = doc.SelectSingleNode(@"//Shortcut");
var node2 = doc.SelectSingleNode(@"/*/Shortcut");
var node3 = doc.SelectSingleNode(@"//*/Shortcut");
var node4 = doc.SelectSingleNode(@"*/Shortcut");
...
每个通话效果在 NULL
节点。
我觉得应该是一些琐碎的XPath语法。 ?你能帮助我。
I think it should be some trivial XPath syntax. Can you help me?
(如果这事项:XML文档是一个的项目,所以有可能是一些涉及空间的问题?!?)。
(In case this matters: The XML document is an input file for a WiX project, so there could be some namespace issues involved?!?).
修改
我也试过以下内容:
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");
连同
together with:
var node1 = doc.SelectSingleNode(@"//Shortcut", nsm);
var node2 = doc.SelectSingleNode(@"/*/Shortcut", nsm);
var node3 = doc.SelectSingleNode(@"//*/Shortcut", nsm);
var node4 = doc.SelectSingleNode(@"*/Shortcut", nsm);
...
通往相同的结果。
Leading to the same results.
修改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);
这成功了。
推荐答案
的选择正是通缉的节点(并没有什么附加)XPath表达式是
(//x:Shortcut)[1]
因此,使用:
doc.SelectNodes("(//x:Shortcut)[1]", someNamespaceManager)
其中,
前缀×
绑定到命名空间http://schemas.microsoft.com/wix/2006/wi
在 someNamespaceManager
这已超过建议的解决方案的优势(使用的SelectSingleNode()
),因为它可以很容易地调整选择了N次想XML文档中的节点
This has an advantage over the proposed solution (to use SelectSingleNode()
), because it can easily be adjusted to select the N-th wanted node in the XML document.
例如:
(//x:Shortcut)[3]
选择3日(按文档顺序) X:快捷方式
元素,以及
selects the 3rd (in document order) x:Shortcut
element, and
(//x:Shortcut)[last()]
选择最后一个(按文档顺序) X:。快捷方式
元素的XML文档中的
selects the last (in document order) x:Shortcut
element in the XML document.
这篇关于在任意深度选择通过XPath的XML节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!