【问题标题】:how to list all nodes of same type in xml using linq?如何使用linq在xml中列出所有相同类型的节点?
【发布时间】:2016-12-28 06:57:52
【问题描述】:
 <?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元素。

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

【问题讨论】:

标签: c# xml linq


【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多