【发布时间】:2010-11-08 12:28:27
【问题描述】:
考虑这个简单的 XML 文档。此处显示的序列化 XML 是来自我无法控制其架构的复杂 POCO 对象的 XmlSerializer 的结果。
<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节点上扩展属性的值。在这种情况下,我们使用 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 方法为给定的 XPath 表达式返回 null。
问题:关于这个 XPath 查询的正确性的任何想法,或者为什么这个方法调用 + XPath 表达式会返回一个空值?也许命名空间是问题的一部分?
【问题讨论】:
-
首先要检查的是 XML 文档是否已正确加载。我可以在根节点的末尾看到一个空的 xmlns 属性 - 对吗?
-
@Oded:正确,我们正在查看已加载 XmlSerializer 的字符串输出的 XmlDocument。
-
@pcampbell:这是一个大文件(HL7!)吗?如果是这样,那么您可能想尝试直接序列化到 XmlDocument。如果你想要一个样本,请告诉我。