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

Retrieve nodes from XML belonging to a specific node

我有一个 XML 这样的:

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

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

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

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

尝试如下:

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"]);
  }
}

我向 Xml 强烈推荐 Linq。你可以在一个语句中解决它:

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")
                             }); 

这将是return您所需要的

Happy coding

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

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

如果您同时需要节点 A 和 B

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

如果你只需要一个单独的节点

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

如果你只需要单独的B节点

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