2016-12-28 46 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,問題獲取XML元素C#

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

你沒有使用LINQ,你想使用LINQ的解決方案嗎?如果不是,你爲什麼要標記它? – RandomStranger

+0

@你可以使用linq – MemoryLeak

+2

你錯過了命名空間。 – MarcinJuraszek

回答

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在文件的頂部,使XmlNamespaceManagerNameTable到範圍。

+0

感謝您的建議。 我試過你所提到的,但它沒有解決我的問題,仍然沒有顯示出奇怪的元素 – MemoryLeak

+0

。我複製了你的XML,運行它並返回4個元素。你確定你的XML看起來像你說的那樣嗎? – MarcinJuraszek