Skip to main content
 首页 » 编程设计

c#之XPATH没有返回结果

2025年05月04日117myhome

我在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); 
        }