Получение нескольких элементов данных в элементе с linq to xml - PullRequest
1 голос
/ 07 мая 2010

Получение нескольких элементов данных в элементе с linq to xml

У меня есть такой xml-файл

<TopLevel>
  <Inside>
    Jibba
  </Inside>
  <Inside>
    Jabba
  </Inside>
</TopLevel>

Мне дали указанный XML и я хочу получить все элементы.Вот код, который у меня есть.

    var q = from c in loaded.Descendants("TopLevel")
            select (XElement)c.Element("Inside");

Я пробовал c.Elements, но это не сработало.Что мне нужно сделать, чтобы получить все внутренние элементы?Этот код просто получает первый тег "Inside".

Ответы [ 2 ]

1 голос
/ 07 мая 2010

Это должно дать вам "Jibba" и "Jabba";вам понадобятся директивы using для System.Linq и System.Xml.Linq:

    var q = from c in loaded.Descendants("TopLevel").Elements("Inside")
            select c.Value;

или (менее конкретно, но все еще работает):

    var q = from c in loaded.Descendants("TopLevel").Elements()
            select c.Value;

или, если хотитечтобы сделать что-то еще с элементами, SelectMany:

    var q = from c in loaded.Descendants("TopLevel")
            from i in c.Elements("Inside")
            select i.Value;

(если вы хотите элемент, а не строку, то просто select c; или select i; - удалите .Value)

0 голосов
/ 02 марта 2011

Мне нужно было сделать этот шаг дальше, и я не совсем понимал, как это сделать. Спасибо за отправную точку. Вот некоторые дополнительные фрукты, чтобы сэкономить труд.

Учитывая некоторые дополнительные забавы xml:

<TopLevel>
    <Inside ident="one">Jibba</Inside>
    <Inside ident="two">Jabba</Inside>
    <Inside ident="one">AlsoJibba</Inside>
    <Inside ident="three">AlsoJabba</Inside>
</TopLevel>

Я добавил предложение where, которое ищет элементы внутри родительского «TopLevel», у которых значение идентификатора атрибута равно «one».

Dim query = From c In loaded.Descendants("TopLevel").Elements("inside")
            Where c.Attribute("ident") = "one"
            Select c.Value

Затем выполнил небольшую демонстрационную консоль с результатами:

For each inside in query
    Console.WriteLine(inside)
Next

Какой вывод:

Jibba
AlsoJibba

Предупреждение о спойлере:

Теперь, если вы скопировали и вставили то, что я только что сделал, и вы используете VB, как я, у вас есть особенно раздражающий нюанс. Код не работает. Обратите внимание на небольшой раздел ".Elements (" inside ") в запросе LINQ. XML чувствителен к регистру. VB крайне не чувствителен к регистру. Пользователи C # могут свободно игнорировать нашу молодость. Просто хотели продемонстрировать, где и что нужно.

Мэтт

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