#c# #linq #linq-to-xml
#c# #linq #linq-to-xml
Вопрос:
У меня есть структура XML следующим образом. Мне нужно извлечь «Значение» и «Строку», сопоставив атрибуты команды? Как написать LINQ для этого?
<Root>
<Command val="1001" type="sync">
<Status>
<DataList>
<Info>
<Value>1</Value>
<String>Sample String 1 is set</String>
</Info>
<Info>
<Value>2</Value>
<String>Sample String 2 is set</String>
</Info>
<Info>
<Value>3</Value>
<String>Sample String 3 is set</String>
</Info>
</DataList>
</Status>
<Command>
</Root>
Я попробовал что-то, как показано ниже, но во время запуска возникло исключение.
lst = (
from command in xmlDoc.Descendants("Command")
.Descendants("Status")
.Descendants("DataList")
select new EnumList
{
val = command.Element("Value").Value,
stringVal = command.Element("String").Value,
})
.ToList();
Комментарии:
1. @alex — Исключением была дополнительная информация: ссылка на объект не установлена на экземпляр объекта.
Ответ №1:
Попробуйте
lst = (
from command in xmlDoc.Descendants("Info")
select new EnumList
{
val = command.Element("Value").Value,
stringVal = command.Element("String").Value,
})
.ToList();
и у вас ошибка в образце xml (нет команды закрыть тег), измените ее на
</Command>
</Root>
Комментарии:
1. Спасибо. Это сработало. Извините, что задаю простые вопросы. Я учусь, как это сделать.
2. Как можно обеспечить условие для получения для конкретной команды, которая соответствует входным атрибутам?
3. Спасибо за поддержку. Мне удалось это написать. Я мог бы добавить условия к запросу и извлечь. Поле комментария не может содержать весь код. Итак, я не публикую.