【问题标题】:C# parsing multiple elementsC#解析多个元素
【发布时间】:2020-03-19 19:03:54
【问题描述】:

我有以下 xml 结构。

<Bd>
<Det AccNo="380619034" Zip="344000"></Det>
<Det AccNo="380619022" Zip="345000"></Det>
</Bd>

已知&lt;Bd&gt;标签下总是有2个元素。

我可以使用以下代码检索第一个元素;

string soapResult = rd.ReadToEnd();
var xdoc = XDocument.Parse(soapResult);
var y = xdoc.Descendants("Bd");


foreach (var x in y) {

var AccNo = x.Element("Bd")?.Element("Det")?.Attribute("AccNo")?.Value;

}

但是,这段代码只给了我第一个元素。我也想获得第二个元素,但不能这样做。我错过了什么?

【问题讨论】:

  • 您可以在 foreach 中使用 y.Nodes() 而不仅仅是 y
  • 您能详细说明一下吗?
  • 你应该使用@Sajid 答案,它更完整。

标签: c# xml xml-parsing


【解决方案1】:

您可以在没有循环的情况下使用Linq,如下面的代码:

XDocument xDocument = XDocument.Parse(soapResult);
IEnumerable<string> accNoList = xDocument.Descendants("Bd")
    .Descendants()
    .Select(x => x.Attribute("AccNo").Value);

演示

Console.WriteLine(string.Join(", ", accNoList));

结果

"380619034, 380619022"

对于您的代码,您可以将其更改为:

var xdoc = XDocument.Parse(soapResult);
var y = xdoc.Descendants("Bd")
    .Descendants();

foreach (var x in y)
{
    var AccNo = x.Attribute("AccNo")?.Value;
    Console.WriteLine(AccNo);
}

希望对你有所帮助。

【讨论】:

  • 如何将结果存储为 AccNo1 和 AccNo2 为字符串?
  • 要么声明两个变量,要么声明一个List&lt;string&gt; 并添加它们。
  • 假设 var AccNo1 = x.Attribute("AccNo")?.Value; AccNo2 是什么?
  • 为您的代码将y 转换为如下列表:var z = y.ToList()string accNo1 = z[0].Attribute("AccNo")?.Value;string accNo2 = z[1].Attribute("AccNo")?.Value;为我的代码您可以使用:string accNo11 = accNoList.FirstOrDefault();string accNo12 = accNoList.LastOrDefault();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多