获取xml元素的问题c#

时间:2016-12-28 08:50:22

标签: c# xml linq xpath

 <?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 assembly = Assembly.GetExecutingAssembly();
    var xml = assembly.GetManifestResourceStream("mynamespace.myxml.xml");

    if (xml != null)
    {
     using (Stream stream = xml)
     {
        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元素。

我做错了什么,为什么我无法查看任何子元素?

1 个答案:

答案 0 :(得分:1)

您错过了命名空间:

XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
nsmgr.AddNamespace("t", "somenamespace");
var t = xml.XPathSelectElements("/t:customUI/t:ribbon/t:tabs/t:tab/t:group", nsmgr);

您需要在文件顶部using System.XmlXmlNamespaceManagerNameTable纳入范围。