#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 с вашим кодом, а также показать, каким должен быть ваш ожидаемый результат.