您好,
我很难在恶魔般的XML上为集成组件做xpath。问题是某些节点是名称空间前缀而其他节点不是。
我有一个示例XML,它声明了一个默认的ns,然后是一些特定的NS用于其他元素:
<?xml version="1.0" encoding="UTF-8"?>
<Header xmlns="http://namespaceFoo.com">
<MessageID>1300121668281</MessageID>
<OriginIdentificaton>
<Code>2050302</Code>
</OriginIdentificaton>
<PatientData>
<ns1:Identificacao xmlns:ns1="http://namespaceBAR.com">
<ns1:SSN>123456789</ns1:SSN>
<ns1:Name>Johnny john</ns1:Name>
</ns1:Identificacao>
<ns2:Diagnosis xmlns:ns2="http://namespaceBAR.com"/>
<ns3:Contacts xmlns:ns3="http://namespaceBAR.com"/>
<ns4:Benefits xmlns:ns4="http://namespaceBAR.com"/>
</PatientData>
</Header>
我正试图用以下内容查询:
XmlDocument xmlData = new XmlDocument and LoadXml()
XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(xmlData.NameTable);
xmlnsManager.AddNamespace(String.Empty, "http://namespaceFoo.com");
XmlNode n1 = xmlData.SelectSingleNode("/Header");
返回Null。
我完全迷失了。我尝试过几种名称空间和xpath查询组合无济于事。
这不应该简单吗?有没有办法查询“/ Element1 / Element2 / ...”而不管这些元素的命名空间是什么?
由于
答案 0 :(得分:1)
你真是太近了!您需要首先为空命名空间赋予“假”前缀(下面的第一行),然后将XmlNamespaceManager传递给SelectSingleNode函数。
xmlnsManager.AddNamespace("x", "http://namespaceFoo.com");
XmlNode n1 = xmlData.SelectSingleNode("/Header", xmlnsManager);