2015-04-02 3 views
0

Я пытаюсь создать общий метод XmlParsing. Возьмите Xml как таковые:C# XmlDocument SelectNodes не возвращает узлы

<body> 
<section> 
    <subsection1> 
     ... 
    </subsection1> 
    <subsection2> 
     ... 
    </subsection2> 
</section> 
<section> 
    <subsection1> 
     ... 
    </subsection1> 
    <subsection2> 
     ... 
    </subsection2> 
</section> 
</body> 

Я пытаюсь захватить все «раздел» узлы, не зная, как глубоко они или их родительские узлы имен.

До сих пор я (мой XML в формате строки)

 XmlDocument xml = new XmlDocument(); 
     xml.LoadXml(XMLtoRead); 

     XmlNodeList nodes = xml.DocumentElement.SelectNodes("//section"); 

Однако граф узел всегда равен 0. Я был под впечатлением «//» ищет recursivly префикс через документ для узлов по имени.

Мой реальный XML является SOAP ответ:

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 


<soap:Body> 
    <Response xmlns="http://tempuri.org/"> 
+2

Есть ли URL-адрес пространства имен в вашем документе xml? – LocEngineer

+0

У меня есть ряд URL-адресов в элементах верхнего уровня в моем документе xml. xmlns = "некоторый url". – colobusgem

+0

Мой XML - это ответ SOAP, см. Вопрос edit – colobusgem

ответ

2

В этом случае не является универсальным, но специфичные для вашего типа ответов SOAP. ;-) Попробуйте следующее:

var ns = new XmlNamespaceManager(xml.NameTable); 
ns.AddNamespace("ns", "http://tempuri.org/"); 
XmlNodeList nodes = xml.DocumentElement.SelectNodes("//ns:section", ns); 
+0

haha, ну общий для моих ответов SOAP да, я попробую это. – colobusgem

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