<row>
<id>9578</id>
<processes>
<process ID="PROCESS A">
<subprocess ID ="STEP A">
<val>abcde</val>
</subprocess>
</process>
<process ID="PROCESS B">
<subprocess ID ="STEP B">
<val>fghij</val>
</subprocess>
</process>
<process ID="PROCESS C">
<subprocess ID ="STEP C">
<val>klmno</val>
</subprocess>
</process>
</processes>
<row>
Я пытаюсь получить данные в элементе val , но у меня возникли проблемы. Пока что это то, что у меня есть:
XmlNodeReader nodereader = new XmlNodeReader(Xdoc);
nodereader.MoveToContent();
var xdoc = XDocument.Load(nodereader);
var doc_list = xdoc.Descendants("row").Select(x => new
{
id = x.Element("id").Value,
ProcessA = x.Element("processes").Elements("process").Single(attr => attr.Attribute("ID").Value == "PROCESS A").Value
}).ToList();
ProcessA
будет содержать значения элемента val (в данном случае abcde
). Но я продолжаю получать NullReferenceException
. Я думаю, что я почти на правильном пути, но мне все еще нужна небольшая помощь.
РЕДАКТИРОВАТЬ Спасибо всем за вашу помощь, но я понимаю, что мой код работает. Проблема была просто орфографическая ошибка из-за идентификатора. Вместо
id = x.Element("id").Value,
я случайно сделал
id = x.Element("Id").Value,
, что привело к NullReferenceException для LINQ. Мой код для получения элемента val сработал. Мораль истории: иногда ошибка может быть не там, где вы думаете.