Рассмотрим этот простой XML-документ. Сериализованный XML, показанный здесь, является результатом XmlSerializer из сложного объекта POCO, чью схему я не контролирую.
<My_RootNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="">
<id root="2.16.840.1.113883.3.51.1.1.1" extension="someIdentifier" xmlns="urn:hl7-org:v3" />
<creationTime xsi:nil="true" xmlns="urn:hl7-org:v3" />
</My_RootNode>
Цель состоит в том, чтобы извлечь значение атрибута расширения на id node. В этом случае мы используем метод SelectSingleNode и получаем выражение XPath как таковое:
XmlNode idNode = myXmlDoc.SelectSingleNode("/My_RootNode/id");
//idNode is evaluated to null at this point in the debugger!
string msgID = idNode.Attributes.GetNamedItem("extension").Value;
Проблема заключается в том, что метод SelectSingleNode
возвращает значение null для данного выражения XPath.
Вопрос: любые идеи по правильности запроса XPath или почему этот метод вызывает выражение + XPath, возвращающее нулевое значение? Возможно, пространства имен являются частью проблемы?