Нет неявного преобразования между XNode и XElement

#linq-to-xml

#linq-to-xml

Вопрос:

У меня есть две переменные XResult, Xtemp типа XElement.

Я пытаюсь извлечь все <vehicle> элементы из Xtemp и добавить их в Xresult в разделе <vehicles> .

Кажется, что в Xtemp иногда <vehicle> будет отображаться под <vehicles> , а иногда это будет само по себе.

 XResult.Descendants(xmlns   "Vehicles").FirstOrDefault().Add(
   XTemp.Descendants(xmlns   "Vehicles").Nodes().Count() > 0 
   ? XTemp.Descendants(xmlns   "Vehicles").Nodes() 
   : (XTemp.Descendants(xmlns   "SearchDataset").FirstOrDefault().Descendants(xmlns   "Vehicle")));  

В приведенном выше коде я использую тернарный оператор, чтобы проверить, <vehicles> есть ли дочерние элементы, затем получить их все, иначе получите все <vehicle> элементы.

Это приводит к ошибке: нет неявного преобразования между System.Collections.Generic.IEnumerable<System.Xml.Linq.XNode> и System.Collections.Generic.IEnumerable <System.Xml.Linq.XElement>

Может ли какой-нибудь орган помочь мне исправить это. Заранее спасибо. BB.

Ответ №1:

В троичном вам нужно решить, использовать ли Nodes() или Descendants() . У вас не может быть обоих. Nodes() возвращает IEnumerable<XNode> и Descendants() возвращает IEnumerable<XElement> . Троичные выражения должны возвращать тот же тип.

Изменить:

 XTemp.Descendants(xmlns   "Vehicles").Nodes()
  

Для:

 XTemp.Descendants(xmlns   "Vehicles").Nodes() 
  

Или вы могли бы добавить Nodes() ко второму выражению.

РЕДАКТИРОВАТЬ: если я правильно понял ваш комментарий, вы хотите выбрать узлы каждого транспортного средства и его самого. Попробуйте это вместо Descendants(xmlns "Vehicle") :

 .Descendants(xmlns   "Vehicle")
.SelectMany(d => d.DescendantNodesAndSelf().Take(1))
  

Take(1) Позволит вам захватить весь узел vehicle и игнорировать все другие узлы, которые принадлежат ему, поскольку я не думаю, что вы хотели, чтобы они повторялись.

Комментарии:

1. Спасибо. Если я добавлю узлы ко второму выражению. Потомки (xmlns «Транспортное средство»). Узлы, затем я получаю все дочерние элементы в <vehicle>, но я хочу извлечь <vehicle> и его дочерние элементы.

2. @BumbleBee смотрите мою правку. Если это не дает ответа на ваш вопрос, пожалуйста, обновите свой исходный вопрос, чтобы показать короткий образец вашего XML с вашим кодом, а также показать, каким должен быть ваш ожидаемый результат.