C# разбор нескольких элементов - PullRequest
0 голосов
/ 19 марта 2020

У меня структура ниже xml.

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

Известно, что под тегом <Bd> всегда есть 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;

}

Однако этот код дает мне только первый элемент. Я тоже хочу получить второй элемент, но не могу этого сделать. Чего мне не хватает?

1 Ответ

3 голосов
/ 19 марта 2020

Вы можете использовать Linq без l oop, например, следующий код:

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);
}

Надеюсь, это поможет вам.

...