我正在尝试提取字段时使用以下XML。
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header xmlns:work="http://bea.com/2004/06/soap/workarea/">
<work:WorkContext xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">
<java class="java.beans.XMLDecoder">
<string>weblogic.app.MerchantQueryWebService</string>
<int>214</int>
<string>weblogic.workarea.StringWorkContext</string>
<string>2.0</string>
<string/>
</java>
</work:WorkContext>
</env:Header>
<env:Body>
<m:RequestTransactionByTimeIntervalDetailedResponse xmlns:m="http://www.zain.com/">
<m:RequestTransactionByTimeIntervalDetailedResult>
<java:Status xmlns:java="java:com.obopay.ws.merchantquery.zain">0</java:Status>
<java:TotalTransactions xmlns:java="java:com.obopay.ws.merchantquery.zain">3</java:TotalTransactions>
<java:TotalAmount xmlns:java="java:com.obopay.ws.merchantquery.zain">13</java:TotalAmount>
<java:Transactions xmlns:java="java:com.obopay.ws.merchantquery.zain">[4736510#254780852341#2#0#55#2018-01-18 11:05:14.166#Name]</java:Transactions>
<java:Message xmlns:java="java:com.obopay.ws.merchantquery.zain">Success</java:Message>
</m:RequestTransactionByTimeIntervalDetailedResult>
</m:RequestTransactionByTimeIntervalDetailedResponse>
</env:Body>
</env:Envelope>
我希望从节点获取数据,但我遇到了困难。
以下是我的代码:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(ServiceResult);
string xpath ="m:RequestTransactionByTimeIntervalDetailedResponse/m:RequestTransactionByTimeIntervalDetailedResult/";
var nodes = xmlDoc.SelectNodes(xpath);
foreach (XmlNode childrenNode in nodes)
{
HttpContext.Current.Response.Write(childrenNode.SelectSingleNode("//java:Transactions").Value);
}
答案 0 :(得分:1)
您的xpath是错误的 - SelectNodes语句的范围来自执行xpath的节点,在您的情况下是文档元素。提供所需节点的完整路径。
此外,您尚未定义m:
命名空间前缀引用的命名空间 - 创建XmlNamespaceManager
,在其上调用AddNamespace
以提供每个相关的命名空间,并将其作为SelectNodes
的论据。
答案 1 :(得分:0)
根据Tom W的指导,我使用了以下代码并且工作得很好:
using (StreamReader rd = new StreamReader(Serviceres.GetResponseStream()))
{
//reading stream
var ServiceResult = rd.ReadToEnd();
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(ServiceResult);
XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(xDoc.NameTable);
xmlnsManager.AddNamespace("env", "http://schemas.xmlsoap.org/soap/envelope/");
xmlnsManager.AddNamespace("work", "http://bea.com/2004/06/soap/workarea/");
xmlnsManager.AddNamespace("m", "http://www.zain.com/");
xmlnsManager.AddNamespace("java", "java:com.obopay.ws.merchantquery.zain");
string transactions = xDoc.SelectSingleNode("env:Envelope/env:Body/m:RequestTransactionByTimeIntervalDetailedResponse/m:RequestTransactionByTimeIntervalDetailedResult/java:Transactions", xmlnsManager).ChildNodes[0].InnerText;
}