Найти значение по имени в массиве XmlNode - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть следующее XML:

<UserArea>
    <Property>
        <NameValue name="amperage" type="StringType">1</NameValue>
    </Property>
    <Property>
        <NameValue name="attachments" type="StringType">2</NameValue>
    </Property>
    <Property>
        <NameValue name="noOfBolts" type="StringType">3</NameValue>
    </Property>
    <Property>
        <NameValue name="boreSize" type="StringType">4</NameValue>
    </Property>
</UserArea>

Это XML Я получаю XmlNode[] и мне нужны все свойства по имени, я пробовал следующие вещи:

      var xmlNodeArray = (XmlNode[])item.UserArea; //get xmlNode Array 
      var attachments = xmlNodeArray.FirstOrDefault(x => x.Name == "attachments")?.InnerText; //Not working, always returning null value
      foreach (var xmlNode in xmlNodeArray)
      {
           var val = xmlNode["attachments"]?.InnerText; // Not working
           var data = xmlNode.InnerText; // working but need to looping
      }

У меня около 250 элементов Property, поэтому я не хочу использовать foreach здесь.

Ответы [ 2 ]

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

Вы можете легко сделать это, используя Xml .Linq . Разобрать ваши xml в XDocument, затем от go до Root потомков и получить значение первого элемента, чей атрибут name равен вложений значение

var document = XDocument.Parse(xml);
var result =
    document.Root?.Descendants()
        .FirstOrDefault(e => e.HasAttributes && e.Attribute("name")?.Value == "attachments")?.Value ??
        string.Empty;
0 голосов
/ 21 февраля 2020

Вы всегда можете выбрать узлы, используя XPath

XmlNodeList nodes = userAreaNode.SelectNodes("//Property/NameValue[@name='attachments']");
...