2016-12-28 1 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") возвращает нуль, можно просматривать элементы XML в XDoc, когда я отладки ,

Что я делаю неправильно, почему я не могу просмотреть какие-либо дочерние элементы?

+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 в верхней части файла, чтобы принести XmlNamespaceManager и NameTable в область видимости.

+0

Спасибо за ваше предложение. Я попробовал то, что вы упоминали, но это не исправило мою проблему, пока не показало никаких элементов. – MemoryLeak

+0

Weird. Я скопировал ваш XML, запустил его и возвратил 4 элемента. Вы уверены, что ваш XML выглядит так, как вы сказали? – MarcinJuraszek

Смежные вопросы