Модификация оператора LINQ to XML для получения определенных данных из вложенного XML - PullRequest
0 голосов
/ 21 ноября 2011

Мне помогли в предыдущем вопросе о том, как использовать Linq для XML, и у меня почти все работает, но я застрял в том, как правильно работать вложения. Пожалуйста, имейте в виду, что я впервые использую LINQ, поэтому я новичок в этом. У меня есть XML-файл, который входит в веб-приложение в виде потока. XML довольно прост, в основном следующий формат:

 <root>
    <people>
        <person>
            <StuffToGet1>
            <StuffToGet2>
            ...
            <StuffToGetPARENT>
                <useless1>
                <useless2>
                ...
                <StuffToGetChild1>
                <StuffToGetChild2>
            </StuffToGetPARENT>
         </person>
    </people>
    </root>

Очевидно, у меня нет проблем с получением вещей, которые находятся на верхнем уровне. В настоящее время мой Linq тянет ВСЕ. Я хочу отфильтровать этот выбор в подзапросе, чтобы игнорировать все, что нет в тегах StuffToGetChild. Все теги будут называться одинаково (НЕ Brand1, Brand2 и т. Д.). Вот то, что я имею до сих пор ... пожалуйста, помогите !!

XDocument xdoc = XDocument.Load(XmlReader.Create(responseStream));
var People = from Person in xdoc.Descendants("Person")
                  where Person.Element("Role").Value != "Admin"
                  orderby Specialist.Element("Role").Value
                  select new
                  {
                  StuffToGet1 = Person.Element("StuffToGet1").Value,
                  StuffToGet2 = Person.Element("StuffToGet2").Value,
                  Brand = Person.Element("StuffToGetPARENT").Value
                          };


        gvTest.DataSource = People;
        gvTest.DataBind();

РЕДАКТИРОВАТЬ: Я только что понял, что я сказал, что может быть немного запутанным. «Бренд» - это то, что находится в тегах «StuffToGetChild». Извините за путаницу.

1 Ответ

0 голосов
/ 21 ноября 2011

Я думаю, что вы можете решить эту проблему с помощью другого запроса linq внутри первого.

from Person in xdoc.Descendants("Person")
              where Person.Element("Role").Value != "Admin"
              orderby Specialist.Element("Role").Value
              select new
              {
              StuffToGet1 = Person.Element("StuffToGet1").Value,
              StuffToGet2 = Person.Element("StuffToGet2").Value,
              Brand = (from x in 
                       Person.Descendants("StuffToGetChild1") select new 
                        {
                            ...
                        })
                      };
...