从xml元素读取值,哪个标记名称包含c#中的冒号(:) [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我从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#代码下方用于获取ReqIDAbhiFNameav的值列表,但它返回空/ null。

var responseEle = from lst in xDoc.Descendants((XNamespace)"http://test.com/ViewCusResp" + "ReqID") select lst;

我知道,我错误地查询格式,任何人都可以帮助我解决这个问题。先感谢您。

c# xml c#-4.0 xml-parsing linq-to-xml
1个回答
0
投票

如果不知道你的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);
}
© www.soinside.com 2019 - 2024. All rights reserved.