从属于特定节点的XML中检索节点

时间:2015-05-08 13:26:14

标签: c# xml nodes

我有这样的XML:

    <ITEM>
  <RACES>
    <TAB>
      <NUMBER>1</NUMBER>
      <A></A>
      <B></B>
    </TAB>
    <TAB>
      <NUMBER>2</NUMBER>
      <A></A>
      <B></B>
    </TAB>
  </RACES>
</ITEM>

是否可以检索所有仅属于TAB且具有NUMBER 1的As和Bs节点作为XmlNodeList?

我使用以下代码,但它当然给了我2个节点。我只想要一个节点:

XmlNodeList xnList = xml.SelectNodes("/ITEM/RACES/TAB/A");

4 个答案:

答案 0 :(得分:1)

你可以做xmlDocument.SelectNodes(表达式)

如果你需要节点A和amp; B

expression = @"//TAB[NUMBER=1]/A|//TAB[NUMBER=1]/B"

如果您只需要一个节点

expression = @"//TAB[NUMBER=1]/A"

如果你只需要B节点单独

expression = @"//TAB[NUMBER=1]/B"

答案 1 :(得分:0)

尝试如下:

XmlNodeList xnList = xml.SelectNodes("/RACES/TAB");
foreach (XmlNode xn in xnList)
{
  int num = xn["NUMBER"].InnerText;
  if(num==1)
  {
    Console.WriteLine("Nodes: {0} {1}", xn["A"], xn["B"]);
  }
}

答案 2 :(得分:0)

我强烈推荐Linq到Xml。你可以在一个声明中敲出来:

var nodes_A_and_B = XDocument.Parse(xml)
                     .Descendants("TAB")
                     .Where(t => t.Element("NUMBER").Value == "1")
                     .Select(t => new 
                             {
                                A = t.Element("A"), 
                                B = t.Element("B")
                             }); 

答案 3 :(得分:0)

它会返回你需要的东西

  

快乐编码

  var items = XElement.Parse(xmlelemet)
                        .Elements("RACES")
                        .Elements("TAB")
                        .Where(n => n.Attribute("NUMBER").Value == 1)
                        .Elements();