Странности с XDocument, XPath и пространствами имен

У меня есть 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 s для элементов, не входящих в пространство имен 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)

Gets the node correctly

Я предполагаю, что это как-то связано с тем, что я неправильно настроил диспетчер пространства имен, но я могу ' Я не знаю, как это исправить. Любая помощь будет отличной.

Спасибо

13
задан GeroldBroser reinstates Monica 9 September 2019 в 21:34
поделиться