SelectSingleNode возвращая пустой указатель для известного хорошего xml пути узла с помощью XPath

rmdir /S /Q %DIRNAME%

41
задан p.campbell 6 July 2009 в 21:06
поделиться

2 ответа

Я сильно подозреваю, что проблема связана с пространствами имен. Попробуйте избавиться от пространства имен, и все будет в порядке, но, очевидно, это не поможет в вашем реальном случае, когда я предполагаю, что документ исправлен.

Я не могу вспомнить, как указать пространство имен в выражение XPath, но я уверен, что проблема в этом.

EDIT: Хорошо, я вспомнил, как это сделать. Однако это не очень приятно - для этого нужно создать XmlNamespaceManager . Вот пример кода, который работает с вашим образцом документа:

using System;
using System.Xml;

public class Test
{
    static void Main()
    {
        XmlDocument doc = new XmlDocument();
        XmlNamespaceManager namespaces = new XmlNamespaceManager(doc.NameTable);
        namespaces.AddNamespace("ns", "urn:hl7-org:v3");
        doc.Load("test.xml");
        XmlNode idNode = doc.SelectSingleNode("/My_RootNode/ns:id", namespaces);
        string msgID = idNode.Attributes["extension"].Value;
        Console.WriteLine(msgID);
    }
}
52
ответ дан 27 November 2019 в 00:30
поделиться

Извините, вы забыли пространство имен. Вам нужно:

XmlNamespaceManager ns = new XmlNamespaceManager(myXmlDoc.NameTable);
ns.AddNamespace("hl7","urn:hl7-org:v3");
XmlNode idNode = myXmlDoc.SelectSingleNode("/My_RootNode/hl7:id", ns);

На самом деле, здесь или в веб-службах, возвращение null из операции XPath или чего-либо, что зависит от XPath, обычно указывает на проблему с пространствами имен XML.

8
ответ дан 27 November 2019 в 00:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: