Я сильно подозреваю, что проблема связана с пространствами имен. Попробуйте избавиться от пространства имен, и все будет в порядке, но, очевидно, это не поможет в вашем реальном случае, когда я предполагаю, что документ исправлен.
Я не могу вспомнить, как указать пространство имен в выражение 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);
}
}
Извините, вы забыли пространство имен. Вам нужно:
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.