我有来自第三方的xml消息,该消息有一个节点:
<ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:npfitlc="NPFIT:HL7:Localisation"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
classCode="DOCCLIN" moodCode="EVN">
我创建了一个Namespace对象,用于识别此节点下的npfitlc项:
ns.AddNamespace("npfitlc", "NPFIT:HL7:Localisation");
但是当我尝试选择ClinicalDocument节点时,它无法找到它:
XmlNode myNode = soapEnvelop.SelectSingleNode
("//soap:Envelope/soap:Body/itk:DistributionEnvelope/itk:payloads/itk:
payload/ClinicalDocument", ns);
正如您在我的文档中看到的,有多个节点可以访问临床文档。当我向下引用itk:payload时,它定位很好:
XmlNode myNode = soapEnvelop.SelectSingleNode
("//soap:Envelope/soap:Body/itk:DistributionEnvelope/itk:
payloads/itk:payload", ns);
我从ClinicalDocument标签中取出xmlns="urn:hl7-org:v3"
,然后我发现它可以通过我的SelectSingleNode调用找到,但是我发送消息的系统验证失败,因为缺少了。
我不确定如何在该节点中定义"root"
命名空间的情况下处理它。
答案 0 :(得分:3)
ClinicalDocument
没有前缀,它有一个xmlns="urn:hl7-org:v3"
命名空间声明,这意味着它的命名空间是urn:hl7-org:v3
。其余的命名空间声明与选择此特定元素的目的完全无关。
所以你需要做的是......
将该命名空间添加到命名空间管理器(使用任何非空前缀):
ns.AddNamespace("hl", "urn:hl7-org:v3");
在XPath中使用该前缀:
XmlNode myNode =
soapEnvelop.SelectSingleNode("//soap:Envelope/soap:Body" +
"/itk:DistributionEnvelope/itk:payloads" +
"/itk:payload/hl:ClinicalDocument", ns);
那应该这样做。