Почему я не могу получить конкретный узел при каких-то условиях? - PullRequest
2 голосов
/ 06 марта 2012

Почему этот xpath не работает со мной? Я хочу текущий title, если language _id =2

./title[language_id=2]

<news pnumber="1" id="1"><event_id>578</event_id><event_type_id>1</event_type_id><language_id>2</language_id><title>meeting</title></news>



<news pnumber="1" id="1"><event_id>578</event_id><event_type_id>1</event_type_id><language_id>1</language_id><title>meeting</title></news>

Ответы [ 3 ]

3 голосов
/ 06 марта 2012

Правильное выражение XPath:

//title[../language_id=2]
2 голосов
/ 06 марта 2012

Чтобы избежать обратной оси, используйте :

self::*[language_id=2]/title.
1 голос
/ 06 марта 2012

Сначала добавьте root в ваш XML, затем:

XDocument doc = XDocument.Load(xmlFilePath);

var result=  doc.Descendants("news")
             .Where(x=>x.Attribute("id") != null && x.Attribute("id").Value = "1")
             .Select(x=>x.Descendants("title").First().Value);

Вот описание этого linq2xml:

Первая загрузка XML-файла (также вы можете разобрать строку xml):

XDocument.Load(xmlFilePath);

Найдите элементы news:

doc.Descendants("news")

Между news элементами выберите элементы, которые имеют id=1:

Where(x=>x.Attribute("id") != null && x.Attribute("id").Value = "1")

Отдля каждого отфильтрованного элемента выберите первое название:

x.Descendants("title").First().Value
...