У меня есть следующий пример XML-файла:
<Top xmlns="abbr:SomeNSValue">
<Next>
<Other>SomeValue</Other>
</Next>
</Top>
Я загружаю его и пытаюсь прочитать так:
FileStream stream = new FileStream(@".\TestXML.xml", FileMode.Open);
XPathDocument xPathDocument = new XPathDocument(stream);
XPathNavigator navigator = xPathDocument.CreateNavigator();
XmlNamespaceManager ns = null;
if (navigator.NameTable != null)
{
ns = new XmlNamespaceManager(navigator.NameTable);
ns.AddNamespace("abbr", "SomeNSValue");
}
XPathNodeIterator iterator = navigator.Select("/Top/Next", ns);
iterator.MoveNext();
Console.WriteLine(iterator.Current.InnerXml);
Выводит полный XML, показанный выше. Не то, что я ищу (я хочу выбрать содержимое узла «Далее».
Но если я возьму xmlns="abbr:SomeNSValue
из XML и попробую снова, я получу то, что искал:
<Other>SomeValue</Other>
В моем реальном сценарии у меня есть XML-код, и мне бы не пришлось изменять его, чтобы отключить пространство имен.
Есть ли способ заставить эту работу работать с пространством имен в ней?
Примечание: Если это имеет значение, это фактическое пространство имен, которое у меня есть в моем файле XML: xmlns="urn:hl7-org:v2xml"