这个问题在这里已有答案:
我从soapResponse中提取了由webservice提供的body数据。但是我无法从包含冒号的标签中提取数据,这是身体反应。
XML示例数据:
<?xml encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://abc/envelope/">
<soapenv:Header xmlns:view="http://abc/ViewCusReq" />
<soapenv:Body xmlns:view="http://abc/ViewCusReq">
<ns3:Cus_Res xmlns:ns3="http://abc/ViewCusResp">
<ns3:ReqID>123</ns3:ReqID>
<ns3:FName>ab</ns3:FName>
</ns3:Cus_Res>
<ns3:Cus_Res xmlns:ns3="http://test.com/ViewCusResp">
<ns3:ReqID>123</ns3:ReqID>
<ns3:FName>ab</ns3:FName>
</ns3:Cus_Res>
</soapenv:Body>
</soapenv:Header>
</soapenv:Envelope>
在c#代码下方用于获取ReqID
和AbhiFNameav
的值列表,但它返回空/ null。
var responseEle = from lst in xDoc.Descendants((XNamespace)"http://test.com/ViewCusResp" + "ReqID") select lst;
我知道,我错误地查询格式,任何人都可以帮助我解决这个问题。先感谢您。
如果不知道你的xml是否只是一个基本样本,或者它是否(一旦纠正)是你在生产中使用的真实例子,就很难做出答案。会有很多Cus_Res
节点吗?
要回答您的确切问题,请参阅下面的代码,选择节点并获取值。但是,如果您的生产xml更复杂,那么您需要做更多的工作来循环Cus_Res
的集合。
string xml = @"<?xml version=""1.0"" encoding=""UTF - 8""?>
<ns3:Cus_Res xmlns:ns3=""http://test.com/customerResponse"">
<ns3:ReqID> 123456789 </ns3:ReqID>
<ns3:FName> Abhinav </ns3:FName>
</ns3:Cus_Res>";
XNamespace xn = "http://test.com/customerResponse";
var xDoc = XDocument.Parse(xml);
var reqid = xDoc.Descendants(xn + "ReqID").First();
var fname = xDoc.Descendants(xn + "FName").First();
Console.WriteLine(reqid.Value);
Console.WriteLine(fname.Value);
更新
如果你在根元素中有许多Cus_Res
节点,你将选择所有Cus_Res
节点然后循环它们,访问它的直接子节点。
再一次,你的xml不需要太多修改来打破这个,你也应该进行空检查我没有证明:
string xml = @"<?xml version=""1.0"" encoding=""UTF - 8""?>
<root>
<ns3:Cus_Res xmlns:ns3=""http://test.com/customerResponse"">
<ns3:ReqID> 123456789 </ns3:ReqID>
<ns3:FName> Abhinav </ns3:FName>
</ns3:Cus_Res>
<ns3:Cus_Res xmlns:ns3=""http://test.com/customerResponse"">
<ns3:ReqID> 3456 </ns3:ReqID>
<ns3:FName> Wayne </ns3:FName>
</ns3:Cus_Res>
<ns3:Cus_Res xmlns:ns3=""http://test.com/customerResponse"">
<ns3:ReqID> 78952</ns3:ReqID>
<ns3:FName>Garth</ns3:FName>
</ns3:Cus_Res>
</root>";
XNamespace xn = "http://test.com/customerResponse";
var xDoc = XDocument.Parse(xml);
var CurResList = xDoc.Descendants(xn + "Cus_Res");
foreach (XElement element in CurResList)
{
Console.WriteLine(element.Element(xn + "ReqID").Value);
Console.WriteLine(element.Element(xn + "FName").Value);
}