我在XMLDocument对象中加载了一些XML。我正在通过使用
For Each node As XmlNode In doc.GetElementsByTagName("Item", [NAMESPACE])
'Do Stuff
Next
我想在此循环中使用xpath拔出所有名称为“ MyNode”的节点
我以为我只需要做一下node.SelectNodes(“ MyNode”),但这将返回零列表。
<Root>
<Item>
<MyNode></MyNode>
<MyNode></MyNode>
<MyNode></MyNode>
<RandomOtherNode></RandomOtherNode>
<RandomOtherNode></RandomOtherNode>
</Item>
<MyNode></MyNode>
<MyNode></MyNode>
<MyNode></MyNode>
<RandomOtherNode></RandomOtherNode>
<RandomOtherNode></RandomOtherNode>
<Item>
</Item>
<Item>
<MyNode></MyNode>
<MyNode></MyNode>
<MyNode></MyNode>
<RandomOtherNode></RandomOtherNode>
<RandomOtherNode></RandomOtherNode>
</Item>
</Root>
我需要做些额外的事情吗?
最佳答案
XPATH的“ MyNode”应该可以工作,我想您的[NAMESPACE]错误。尝试在不使用NAMESPACE的情况下调用GetElementsByTagName()。要么查看循环中的代码,然后确保您没有格式错误的WriteLine()或其他内容。
请原谅以下C#示例,因为我很少使用VB。它表明您的XPATH是正确的...
string xml = @"
<Root>
<Item>
<MyNode></MyNode>
<MyNode></MyNode>
<MyNode></MyNode>
<RandomOtherNode></RandomOtherNode>
<RandomOtherNode></RandomOtherNode>
</Item>
<MyNode></MyNode>
<MyNode></MyNode>
<MyNode></MyNode>
<RandomOtherNode></RandomOtherNode>
<RandomOtherNode></RandomOtherNode>
<Item>
</Item>
<Item>
<MyNode></MyNode>
<MyNode></MyNode>
<MyNode></MyNode>
<RandomOtherNode></RandomOtherNode>
<RandomOtherNode></RandomOtherNode>
</Item>
</Root>
";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
foreach (XmlNode node in doc.GetElementsByTagName("Item"))
{
foreach (XmlNode n2 in node.SelectNodes("MyNode"))
Console.WriteLine("{0}:{1}", node.Name, n2.Name);
}
关于c# - XPATH没有返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3948448/