Использование XDocument.Descendants для получения всех «сигналов», но требуется только определенный «сигнал» - PullRequest
0 голосов
/ 24 февраля 2020

У меня xml вот так:

<signals>
  <signal name="N$41"></signal>
  <signal name="S$80"></signal>
  <signal name="EPD_PWR">
    <contactref element="HS1" pad="40" />
  </signal>
  ...
</signals>

И я получаю все сигналы, используя этот код:

var result = System.Xml.Linq.XDocument.Load(filename).Descendants("signal");

            foreach (var sig in result)
            {
                signals += sig.Attribute("name").Value.ToString() + " ";
            }
MessageBox.Show(signals);

Проблема в том, что я просто хочу сохранить все «signal», который имеет contactref элемента, т.е. «HS1», ​​и не сохраняет их, если у них нет contactref или имя элемента, отличное от «HS1».

Как бы я это сделал, если это возможно?

1 Ответ

1 голос
/ 24 февраля 2020

Вам просто нужно использовать обычную фильтрацию LINQ через Where:

var result = XDocument.Load(filename)
    .Descendants("signal")
    .Where(s => s.Element("contactref")?.Attribute("element")?.Value == "HS1");

Я бы тогда также предложил использовать string.Join для построения вашей строки:

string signals = string.Join(" ", result.Select(s => s.Attribute("EPD_PWR").Value)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...