Неявное преобразование между XNode и XElement - PullRequest
3 голосов
/ 26 мая 2011

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

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

ItКажется, что в 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 Ответ

2 голосов
/ 26 мая 2011

В троице вам нужно решить, использовать ли 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) позволит вам захватить весь узел транспортного средства и игнорировать все остальные узлы, которые принадлежат ему, так как я не думаю, что вы хотели теповторяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...