2016-12-28 70 views
0
<?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從組件,如何使用linq在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,我可以查看的XML元素中時XDOC我調試。

我不知道爲什麼會發生這種情況,在我問這個問題之前,我嘗試了下面提到的所有建議(沒有任何工作)。

+0

http://stackoverflow.com/questions/15453293/b​​asic-filtering-in-linq-to-xml-queries試試這個 – vinodh

回答

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 
     }; 
0

爲組創建類並使用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(); 
相關問題