oronsultan Ответов: 2

Итерация через xmldocument в зависимости от значения с помощью LINQ в C#


Эй ребята,
У меня xml выглядит так:
<Root>
  <Categories TopCategory="txt 1" MediumCategory="txt 2" SubCategory="txt 3" />
  <Categories TopCategory="txt 4" MediumCategory="txt 4" SubCategory="txt 5" />
  <Categories TopCategory="txt 7" MediumCategory="txt 8" SubCategory="txt 9" />
  <Categories TopCategory="txt 10" MediumCategory="txt 11" SubCategory="txt 12" />
  <Categories TopCategory="txt 13" MediumCategory="txt 14" SubCategory="txt 15" />
  <Categories TopCategory="txt 16" MediumCategory="txt 17" SubCategory="txt 18" />
</Root>


Теперь xml передается объекту XmlDocument, и я хочу извлечь "TopCategory" &" MediumCategory "только там, где значение" SubCategory "= = "txt 12" (например) с помощью LINQ.
Есть Идеи? пожалуйста помочь....

Что я уже пробовал:

.......................................................

2 Ответов

Рейтинг:
1

Maciej Los

В качестве альтернативы решению 1 путем Graeme_Grant[^], я хотел бы сказать...

Документация MSDN очень хороша. Я бы предложил начать с:
Обзор LINQ to XML (C#)[^]
LINQ to XML (C#)[^]
Основные запросы (LINQ to XML) (C#)[^], особенно: Как найти элемент с определенным атрибутом (C#)[^]

Я бы решил вашу проблему таким образом:

string xcontent = @"<Root>
  <Categories TopCategory='txt 1' MediumCategory='txt 2' SubCategory='txt 3' />
  <Categories TopCategory='txt 4' MediumCategory='txt 4' SubCategory='txt 5' />
  <Categories TopCategory='txt 7' MediumCategory='txt 8' SubCategory='txt 9' />
  <Categories TopCategory='txt 10' MediumCategory='txt 11' SubCategory='txt 12' />
  <Categories TopCategory='txt 13' MediumCategory='txt 14' SubCategory='txt 15' />
  <Categories TopCategory='txt 16' MediumCategory='txt 17' SubCategory='txt 18' />
</Root>";

XmlReader rdr = XmlReader.Create(new StringReader(xcontent));
XDocument xdoc = XDocument.Load(rdr);

var result = xdoc.Descendants()
		.Where(x=>(string)x.Attribute("SubCategory")=="txt 12");


Выше код должен вернуться (IEnumerable<XElement>):
<Categories TopCategory="txt 10" MediumCategory="txt 11" SubCategory="txt 12" />


Рейтинг:
0

Graeme_Grant

Этот сайт покажет вам, как: Linq to XML Tutorials с примерами / DotNetCurry[^]- см. пункт 5. "Как получить доступ к определенному элементу, имеющему определенный атрибут, с помощью LINQ to XML" - легко адаптируется к вашим требованиям