XPATH没有返回任何结果

时间:2010-10-16 10:10:23

标签: c# .net xml xpath

我在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>

我必须做些额外的事吗?

3 个答案:

答案 0 :(得分:2)

XPAN的“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);
        }

答案 1 :(得分:1)

要获取所有MyNode,您可以使用doc.DocumentElement.SelectNodes(“// MyNode”)甚至更好 doc.DocumentElement.SelectNodes( “/根/项目/ MYNODE”)

答案 2 :(得分:0)

尝试“// MyNode”或“descendant :: MyNode”