У меня есть XML-документ, который выглядит следующим образом:
<kmsg xmlns="http://url1" xmlns:env="url1" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="http://location that does not exist.xsd">
<header>
<env:envelope>
<env:source branch="907" machine="0" password="J123"/>
</env:envelope>
</header>
<body>
<OrderResponse xmlns="urn:schemasbasdaorg:2000:orderResponse:xdr:3.01">
<SomeMoreNodes/>
</OrderResponse>
</body>
У него нет доступных схем, несмотря на указанное пространство имен (я получаю это из внешнего источника, такне иметь контроля).Я анализирую его с помощью XDocument, но продолжаю получать значения NULL для элементов, не входящих в пространство имен env.Я настраиваю XDocument так:
XDocument Source = XDocument.Load("Testfile.xml");
XmlNamespaceManager oManager = new XmlNamespaceManager(new NameTable());
oManager.AddNamespace(String.Empty, "http://xml.kerridge.net/k8msg");
oManager.AddNamespace("env", "http://xml.kerridge.net/k8msgEnvelope");
Затем я пытаюсь получить значения:
? Source.XPathSelectElement ("// kmsg", oManager)
null
? Source.XPathSelectElement ("// header", oManager)
null
? Source.XPathSelectElement ("// env: source", oManager)
Правильно получает узел
Я предполагаю, что это как-то связано с неправильной настройкой менеджера пространства имен, но я не могу понять, как это исправить.Любая помощь будет отличной.
Спасибо