2012-03-06 3 views
2

Почему этот 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> 
+1

потому, что его не так? – dice

+0

то, что является правильным :) –

+1

ваш запрос для элемента title с атрибутом language_id 2 - я думаю, что вам нужно искать, это родительский элемент, а затем извлечь из него заголовок - боюсь, я не знаю, как это сделать что. – dice

ответ

3

Правильное выражение XPath является

//title[../language_id=2] 
+0

'./title [../ language_id = 2]' спасибо, много это работает со мной –

1

Сначала добавьте корень в ваш 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 strin г):

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 
+0

Не могли бы вы помочь мне с 'xpath'? –

+0

Я думаю, что добавленных описаний достаточно, чтобы понять это (если вы немного знакомы с linq), linq2xml работает быстрее, а IMO более читабельна, чем xpath. Также вероятность ошибок в linq2xml меньше, чем xpath. –

+0

Мне нужен 'xpath', потому что я использую следующий метод: ' lbl_date.Text = XPathBinder.Eval (((lbl_date.NamingContainer как RadRotatorItem)). DataItem), ./title "," ");' –

2

Для того, чтобы избежать обратного оси, использовать:

self::*[language_id=2]/title. 
+0

Не могли бы вы объяснить, что означает u под обратную ось? –

+1

@just_name: Обратные оси: 'parent ::', 'ancestor ::', 'ancestor-or-self ::', 'previous-sibling ::' и 'previous ::' –

+0

большое спасибо ... –

 Смежные вопросы

  • Нет связанных вопросов^_^