XmlDocument.SelectNodes

Есть XML типо такого:
<*********************************** xmlns="http://tempuri.org/***********************************.xsd">  <Opciones>    <NOpc>1</NOpc>  </Opciones>  <Opciones>    <NOpc>1</NOpc>  </Opciones></***********************************>
Пишу:
         foreach (System.Xml.XmlNode n in dRS.FirstChild.ChildNodes)            {                System.Xml.XmlNode n2 = n.SelectSingleNode("NOpc");            }
И оно не находит этот тэг!!! Если писать:
         foreach (System.Xml.XmlNode n in dRS.SelectNodes("***********************************/Opciones"))            {                System.Xml.XmlNode n2 = n.SelectSingleNode("NOpc");            }
То оно вообще не найдёт даже тэги "Opciones"!!!Это какое-то зло. Мне кажется это как-то связано с языком. Но я не понимаю. Я ж копипастил название тэгов из самого XML, то ж даже если каким-то чудом испанские буквы, которые выглядят так же само, как и английские, будут иметь разные значения, то XmlDocument должен их всё равно схавать. То ж в чём проблема!!?
6 ответов

Bogdan1024, пробема в xmlns=... Заведи XmlNamespaceManager, зарегестрируй в нем префикс для http://tempuri.org/***********************************.xsd, и передавай его в SelectSingleNode/SelectNodes. И к имени ноды приписывай.


А пример можно?


По большому счету XML очень кривой. Две коллекции никак не отличаются друг от друга - это не хорошо.Зачем определен namespace в тексте XML? в любом случае можно писать так:
XmlNamespaceManager xmlns = new XmlNamespaceManager(xmlDoc.NameTable);            xmlns.AddNamespace("prfx", "http://tempuri.org/***********************************.xsd");                        XmlNode node = xmlDoc.SelectSingleNode("//prfx:NOpc",xmlns);
но это за уши подтягивать. Лучше переписать XML. Убрать не нужные namespace и добавить определенности в коллекции.


XML не мой ;)Всем спасибо за помощь 


Кстати, зачем тут "//"?
XmlNode node = xmlDoc.SelectSingleNode("//prfx:NOpc",xmlns);


Bogdan1024, это контекст Recursive descent - где угодно в документе.