Лучший способ аккуратно обрабатывать вложенный XML с помощью LINQ - PullRequest
5 голосов
/ 08 января 2009

Я работаю с XML, который был разработан кем-то, кому платили за уровень вложенности. Различные xml-файлы всегда выглядят примерно так:

<Car>   
   <Color>
       <Paint>
          <AnotherUselessTag>
               <SomeSemanticBs>
                   <TheImportantData>

С LINQ легко получить то, что я хочу: (не совсем, но вы понимаете, в чем дело)

from x in car.Descendants("x")
from y in x.Descendants("y")
from z in y.Descendants("z")
select z.WhatIWant();

Я спрашиваю, есть ли лучший способ сделать это? Какой-нибудь способ навигации по DOM с Linq?

Ответы [ 2 ]

8 голосов
/ 08 января 2009

Если вы уверены, что все, что вам нужно, это TheImporantData элементы из Car элемента и что TheImportantData не используется в качестве имени тега, то где:

от x в автомобиле. Потомки ("TheImportantData") выберите x.WhatIWant ();

Подойдет.

5 голосов
/ 09 января 2009

Рассмотрим XNode метод расширения XPathSelectElements. В вашем случае:

var foo = from x in car.XPathSelectElements("Color/Paint/AnotherUselessTag/SomeSemanticBs/TheImportantData")
select x.WhatIWant();

В отличие от метода Descendants, использование XPath таким способом обеспечивает переход к нужным элементам - например, он будет рассматривать только элементы Color в элементе Car и только элементы Paint в элементах Color и т. д. (Вы можете эмулировать менее различающее поведение метода Descendants с шаблоном XPath .//TheImportantData, если вам нужно.)

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