You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取SOAP XML中RetrieveFacsimileResult元素内的数据?

解决XML命名空间导致的XPath查询错误

你的问题出在XML包含命名空间,但XPath查询时未注册对应的命名空间管理器。以下是两种可行的解决方法:

方法一:使用XmlNamespaceManager配合XmlDocument

为XPath查询注册所需的命名空间,再执行查询:

XmlDocument MyDoc = new XmlDocument();
MyDoc.LoadXml(response.Content);

// 初始化命名空间管理器,注册XML中用到的命名空间
XmlNamespaceManager nsManager = new XmlNamespaceManager(MyDoc.NameTable);
// 注册soap前缀对应的命名空间
nsManager.AddNamespace("soap", "http://www.w3.org/2003/05/soap-envelope");
// 注册默认命名空间(RetrieveFacsimileResponse所在的命名空间),这里用ns作为前缀
nsManager.AddNamespace("ns", "http://cdr.ffiec.gov/public/services");

// 传入命名空间管理器执行XPath查询
XmlNode MyNode = MyDoc.SelectSingleNode("//soap:Envelope/soap:Body/ns:RetrieveFacsimileResponse/ns:RetrieveFacsimileResult", nsManager);

// 获取元素内容
if (MyNode != null)
{
    string facsimileData = MyNode.InnerText;
    // 后续处理逻辑
}

方法二:使用Linq to XML(更简洁)

如果项目支持.NET 3.5及以上版本,推荐用XDocument实现,无需额外管理命名空间前缀:

XDocument doc = XDocument.Parse(response.Content);
// 定义XML中的命名空间
XNamespace soapNs = "http://www.w3.org/2003/05/soap-envelope";
XNamespace serviceNs = "http://cdr.ffiec.gov/public/services";

// 链式查询获取目标元素内容
string facsimileData = doc.Descendants(soapNs + "Body")
                          .Elements(serviceNs + "RetrieveFacsimileResponse")
                          .Elements(serviceNs + "RetrieveFacsimileResult")
                          .FirstOrDefault()?.Value;

注意事项

  • 注册的命名空间URI必须和XML中声明的完全一致,包括大小写和特殊字符
  • 如果只需定位RetrieveFacsimileResult元素,也可以用简化的XPath://ns:RetrieveFacsimileResult,直接跳过上层节点,提升查询效率

内容的提问来源于stack exchange,提问作者Tronics

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 11:31:18