C# 具有多个名称空间的Xml路径
我无法确定以下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
我关注这篇文章:您需要在查询
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();