как перечислить все узлы одного типа в xml с помощью linq?

 <?xml version="1.0" encoding="utf-8"?>
 <customUI onLoad="UI_Load" >
  <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>

I загрузка 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") возвращает ничего

I then xdoc.Element("customUI")returns null, I can view the xml elements in xdoc when I debug.

Я не знаю, почему это происходит, я попробовал все предложения, упомянутые ниже (ничего не работало), прежде чем я задал этот вопрос.

2 ответа

  1. //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 
            };
    
  2. Создайте класс для группы и используйте 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();