C# 具有多个名称空间的Xml路径

C# 具有多个名称空间的Xml路径,c#,.net,xml,xpath,C#,.net,Xml,Xpath,我无法确定以下Xml(示例)需要使用哪些名称空间: 我关注这篇文章:您需要在查询http://www.example.net/名称空间 var nsmgr = new XmlNamespaceManager(doc.NameTable); nsmgr.AddNamespace("s", "http://schemas.xmlsoap.org/soap/envelope/"); nsmgr.AddNamespace("ex", "http://www.example.net"); XmlNod

我无法确定以下Xml(示例)需要使用哪些名称空间:


我关注这篇文章:

您需要在查询
http://www.example.net/
名称空间

var nsmgr = new XmlNamespaceManager(doc.NameTable);

nsmgr.AddNamespace("s", "http://schemas.xmlsoap.org/soap/envelope/");
nsmgr.AddNamespace("ex", "http://www.example.net");

XmlNode node = doc.SelectSingleNode(
    "/s:Envelope/s:Body/ResponseCharge/ex:ResponseInfo/ex:ResponseTransactionDetail/ex:AuthorizationNumber", 
    nsmgr); 
我任意选择了
ex
作为前缀。
XmlNamespaceManager
中定义的内容只与XPath查询相关,文档中使用的前缀不相关

或者,我建议您使用LINQ to XML:

XNamespace ns = "http://www.example.net"

var doc = XDocument.Load(responseXmlFile);

var authNo = (int)doc.Descendants(ns + "AuthorizationNumber").Single();

XPath表达式中的ResponseInfo上没有命名空间前缀?我的“XmlNode”查询将为NULL。我删除了注释为“ResponseInfo”的内容。还将XmlNode更改为XmlNodeList,如我下面的链接所示。看起来元素ResponseCharge没有名称空间。我建议为“”声明一个前缀,并在ResponseCharge下面的节点查询中使用它。这是95%的正确答案。“ResponseCharge”实际上不需要“ex”前缀。为了这个浪费了几乎整个上午。非常感谢@杰库比·德奥。这就是我没有测试它的原因。。。我已经修好了。
var nsmgr = new XmlNamespaceManager(doc.NameTable);

nsmgr.AddNamespace("s", "http://schemas.xmlsoap.org/soap/envelope/");
nsmgr.AddNamespace("ex", "http://www.example.net");

XmlNode node = doc.SelectSingleNode(
    "/s:Envelope/s:Body/ResponseCharge/ex:ResponseInfo/ex:ResponseTransactionDetail/ex:AuthorizationNumber", 
    nsmgr); 
XNamespace ns = "http://www.example.net"

var doc = XDocument.Load(responseXmlFile);

var authNo = (int)doc.Descendants(ns + "AuthorizationNumber").Single();