找不到通过文本从 XMLNodeList 获取 child 节点的方法

Cannot find a way to get a child node from an XMLNodeList by text

这让我很难受,我有一个 XML 文档,我需要能够获取某些节点的文本值,但我尝试的一切都失败了。给定以下 XML 文档,我需要获取诸如患者 ID、姓氏等信息。

<Message xmlns="http://" version="010" release="006">
<Header>
    <To Qualifier="C">1306841101</To>
    <From Qualifier="P">8899922</From>
</Header>
<Body>
    <RxFill>
        <Patient>
            <Identification>
      <ID>193306093523</ID>
      <ID3>111223333</ID3>
            </Identification>
            <Name>
                <LastName>Smith</LastName>
                <FirstName>Jane</FirstName>
            </Name>
        </Patient>
    </RxFill>
</Body>

我可以像这样得到 'Patient' 的实际节点列表:

XmlNode root = oDoc.DocumentElement; 
oDoc.GetElementsByTagName("Patient")

但后来我卡住了,如果我随后尝试获取 child 节点,xpath 永远找不到它们。

例如:

oDoc.GetElementsByTagName("Patient")[0].SelectSingleNode("Identification")

出现空值,尽管我可以在调试器中看到 "Identification" 是 FirstChild。我也添加了斜杠:“//Identification”但没有任何乐趣。

不过,我可以从文档中找到它:

oDoc.GetElementsByTagName("Identification")

但这行不通,因为我可能在文档中有其他类似的标签;我只想要属于患者的身份标签。

我试过遍历所有 children 来找到它们,但这似乎效率很低。

有什么想法吗?

您应该在 XPath 中包含名称空间。您可以使用 XmlNamespaceManager:

XmlNode root = oDoc.DocumentElement;
XmlNode patient = oDoc.GetElementsByTagName("Patient")[0];

XmlNamespaceManager nsm = new XmlNamespaceManager(new NameTable());
nsm.AddNamespace("ns", "http://");

XmlNode identification = patient.SelectSingleNode("ns:Identification", nsm);
string id = identification.SelectSingleNode("ns:ID", nsm).InnerText;