找不到通过文本从 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;
这让我很难受,我有一个 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;