C# 对具有默认名称空间的文档执行XPath查询
可能重复:C# 对具有默认名称空间的文档执行XPath查询,c#,.net,xml,xpath,C#,.net,Xml,Xpath,可能重复: 你好, 我很难为集成组件在恶魔般的XML上使用xpath。问题在于,有些节点带有名称空间前缀,而另一些节点则没有 我有一个示例XML,它声明了一个默认的ns,然后为其他元素声明了一些特定的ns: <?xml version="1.0" encoding="UTF-8"?> <Header xmlns="http://namespaceFoo.com"> <MessageID>1300121668281</MessageID>
你好, 我很难为集成组件在恶魔般的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/…”而不考虑这些元素的名称空间
谢谢你就这么近了!您需要首先为空命名空间提供一个“假”前缀(下面的第一行),然后将XmlNamespaceManager传递到SelectSingleNode函数中
xmlnsManager.AddNamespace("x", "http://namespaceFoo.com");
XmlNode n1 = xmlData.SelectSingleNode("/Header", xmlnsManager);
不客气。这一条最近也让我感到困惑。我想看看这个谢谢,伙计,真为我发布了一个骗局感到羞耻!我不会担心的。。。有时我会不断地搜索,但我想要的问题只有在我键入我的问题的标题时才会出现。