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);

不客气。这一条最近也让我感到困惑。我想看看这个谢谢,伙计,真为我发布了一个骗局感到羞耻!我不会担心的。。。有时我会不断地搜索,但我想要的问题只有在我键入我的问题的标题时才会出现。