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

xmlnode.selectSingleNode是否返回当前之外的元素?

  •  18
  • IordanTanev  · 技术社区  · 15 年前

    我的问题是这样的。假设我有这样的XML

    <root>
      <child Name = "child1">
        <element1>Value1</element1>
        <element2>Value2</element2>
      </child>
      <child Name = "child2">
        <element1>Value1</element1>
        <element2>Value2</element2>
        <element3>Value3</element3>
      </child>
    </root>
    

    我有一个方法,作为参数xmlnode“node”。假设“node”具有值“child1”,那么我尝试如下:

    node.SelectSingleNode( "//element3" );
    

    问题是此代码从“child2”返回element3。我想要的是,如果“node”没有子元素“element3”返回空值,那么我就手工添加它。
    最好的问候,
    约旦

    4 回复  |  直到 12 年前
        1
  •  21
  •   Welbog    15 年前

    您拥有的xpath表达式不是您想要的。

    替换为:

    node.SelectSingleNode( "element3" ); 
    

    你会得到你想要的结果。

        2
  •  8
  •   taylonr    15 年前

    “/”是全局查找。

    你需要做的是列出所有孩子的名单

    XmlNodeList nodes = xmlDoc.SelectNodes("//Child");
    

    循环浏览该列表并执行

    XmlNode node = nodes.SelectSingleNode("element3");
    

    如果它不在,它将返回空值,并且将跨过每一个正在寻找的孩子。

        3
  •  8
  •   kazim    12 年前

    当我想在指定的节点上运行xpath时,下面的工作是完美的。

    XmlNodeList nodes = xmlDoc.SelectNodes(".//Child");
    
        4
  •  3
  •   Alexander Vakrilov    15 年前

    这里的问题是您正在使用的xpath表达式,请尝试不使用“//”。像这样:

    node.SelectSingleNode( "element3" );

    多读 here .