根据具体节点选择数据个数

本文关键字:数据 选择 节点 | 更新日期: 2023-09-27 18:10:16

我有以下一段代码

XmlDocument docu = new XmlDocument();
        docu.Load(file);
XmlNodeList lst = docu.GetElementsByTagName("name");
                        foreach (XmlNode n in lst)
                        {
                            string text = n.InnerText;
    var types = doc.Element("program").Element("program-function").Element("function").Descendants("type").Where(x => x.Value == text).Select(c => c.Value).ToArray();
    }

我的XML如下

<program> 
  <program-function> 
    <function>
    <name>add</name> 
    <return-type>double</return-type> 
    <params> 
     <type>double</type> 
     <type-value>a</type-value> 
     <type>double</type> 
     <type-value>b</type-value> 
     <type>string</type> 
     <type-value>c</type-value> 
    </params> 
   <body> return a + b + c; </body> 
</function> 
  <function>
   <name>test</name> 
   <return-type>int</return-type> 
   <params> 
     <type>double</type> 
     <type-value>a</type-value> 
     <type>double</type> 
     <type-value>b</type-value> 
     </params> 
   <body> return a + b; </body> 
  </function> 
 </program-function> 
</program>

我需要能够得到每个<name><type>的数量

add的结果应为3 = types.count() = 3
试验结果应为2 = types.count() = 2

任何建议吗?

编辑:如果我想检索types中的每个值?ie。add包含abctest包含ab。希望将其存储在数组中以便于检索

根据具体节点选择数据个数

如何使用Linq到Xml

 var xDoc = XDocument.Parse(xml);
var functions = xDoc.Descendants("function")
                .Select(f => new
                {
                    Name = f.Element("name").Value,
                    Types = f.Descendants("type").Select(t=>t.Value).ToList(),
                    //Types = f.Descendants("type").Count()
                    TypeValues = f.Descendants("type-value").Select(t=>t.Value).ToList()
                })
                .ToList();

试试这个:

XDocument doc = XDocument.Load(your file);
var vals = doc.Element("program").Element("program-function").Elements("function");
var result = vals.Select(i => 
                     new { name = i.Element("name"), 
                           count = i.Elements("type").Count() }