如何使用linq列出xml中相同类型的所有节点?

时间:2016-12-28 06:57:53

标签: c# xml linq

 <?xml version="1.0" encoding="utf-8"?>
 <customUI onLoad="UI_Load" xmlns="somenamespace">
  <commands>
   <command id ="command1" onAction ="ExecuteCommand" />
  </commands>
 <ribbon>
  <tabs>
   <tab id="tab1">
    <group id="group1">
     ....
    </group>
    <group id="group2">
     ....
    </group>
    <group id="group3">
     ....
    </group>
    <group id="group4">
     ....
    </group>
   </tab>
  </tabs>
 </ribbon>
</customUI>

我从程序集加载xml,

       var xml = assembly.GetManifestResourceStream("mynamespace.myxml.xml");

            if (xml != null)
            {
                using (Stream stream = ribbonxml)
                {
                    XElement xdoc = XElement.Load(stream);
                    var elements = xdoc.XPathSelectElements("customUI/ribbon/tabs/tab/group");

                }
            }

xdoc.XPathSelectElements("customUI/ribbon/tabs/tab/group")不返回任何内容

然后我xdoc.Element("customUI")返回null,我可以在调试时查看xdoc中的xml元素。

我不知道为什么会这样,在我提出这个问题之前,我尝试了下面提到的所有建议(没有用)。

2 个答案:

答案 0 :(得分:0)

//something like this
class Group
{
public string Id{ get; set; }
public string Field1{ get; set; }
public string FieldN { get; set; }
}
var groups = from xe in xdoc.Element("ribbon").Element("tabs").Elements("tab").Elements("group")
        select new Group
        { 
            Id= xe.Attribute("id").Value, 
            Field1= xe.Element("Field1").Value, 
            FieldN  = xe.Element("FieldN ").Value 
        };

答案 1 :(得分:0)

为group创建一个类,并使用XElement.Descendants()方法选择XML中的所有组标记。

class Group
{
    public string Id { get; set; }
    //You can add other group content
}  
XElement xmlFileContent = XElement.Load("filePath");
var groupXmlFormat = xmlFileContent.Descendants("group")
                                                .Select(group =>
                                                {
                                                    return new Group
                                                    {
                                                        Id=group.Attribute("id").Value,

                                                    };
                                                }).ToList();