<?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元素。
我做错了什么,为什么我无法查看任何子元素?
答案 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.Xml
将XmlNamespaceManager
和NameTable
纳入范围。