代码之家  ›  专栏  ›  技术社区  ›  Ben

XPATH未返回结果

  •  1
  • Ben  · 技术社区  · 14 年前

    For Each node As XmlNode In doc.GetElementsByTagName("Item", [NAMESPACE])
       'Do Stuff
    Next
    

    我想在这个循环中使用xpath拉出所有名为“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 回复  |  直到 14 年前
        1
  •  2
  •   Les    14 年前

    “MyNode”的XPATH应该可以工作,我猜您的[NAMESPACE]是错误的。尝试在不使用命名空间的情况下调用GetElementsByTagName()。或者,查看循环中的代码,确保没有格式错误的WriteLine()或其他东西。

    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);
            }
    
        2
  •  1
  •   florin    14 年前

    要获取所有MyNode,可以使用doc.DocumentElement.SelectNodes(“//MyNode”)或更好的方法 doc.DocumentElement.SelectNodes(“/Root/Item/MyNode”)

        3
  •  0
  •   Marc Gravell    14 年前