【发布时间】:2014-03-14 17:03:27
【问题描述】:
我正在尝试/努力在以下 XML 结构中查询 getCompanyListResponse-Tag(上面的每个标签都可以与 namespacemanager 和“soap”前缀一起正常工作):
<?xml version=”1.0” encoding=”UTF-8”?>
<soap:Envelope xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/”>
<soap:Header />
<soap:Body>
<getCompanyListResponse xmlns=”http://test.org/schema”>
<company>
<id>12345</id>
<address>
<role>LOCATION</role>
</adress>
</company>
</getCompanyListResponse>
</soap:Body>
</soap:Envelope>
不幸的是,我无法更改任何 XML,因为 XML 是 Web 服务的响应,我无法影响。 遗憾的是,将默认命名空间添加到 XMLNamespacemanager 并不起作用。 我没有找到任何关于如何使用 local-name 函数的足够答案。
Stream responseStream = response.GetResponseStream();
XPathDocument compDoc = new XPathDocument(responseStream);
XPathNavigator root = compDoc.CreateNavigator();
XmlNamespaceManager resolver = new XmlNamespaceManager(root.NameTable);
resolver.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
resolver.AddNamespace(String.Empty, "http://test.org/schema");
resolver.AddNamespace("null", "http://test.org/schema");
root.MoveToFirstChild();
XPathNavigator body = root.SelectSingleNode("[/local-name()='soap:Envelope/soap:Body/getCompanyListResponse']", resolver);
在上面代码的最后一行,我得到了异常:“表达式必须产生一个节点集”(或接近那个,因为我用德语使用 Visual Studio,这是我的翻译尝试)
【问题讨论】: