как написать этот запрос xpath? - PullRequest
3 голосов
/ 14 февраля 2011

Я собираю rss с нескольких сайтов, и моя настоящая проблема связана с их полем Pubdate, потому что большинство их значений PubDate недопустимы, так как мне удается получить значение из набора полей PubDate с помощью xpath.вот что я написал:

//item/title | 
//item/description | 
//item/link | 
//item/pubDate | 
//item/category

, и я хочу ограничить свой результат 10 последними новостями, которые я знаю в xpath, у нас есть функция с именем postion (), и я должен использовать ее следующим образом:

[postion() <= 10]

, но когда я смешиваю эти два запроса xpath вместе, я не получу должного результата:

 //item/title | 
 //item/description | 
 //item/link | 
 //item/pubDate | 
 //item/category [position() <= 10]

как мне написать этот конкретный запрос xpath в правильном формате.и есть ли какая-нибудь быстрая книга по xpath?

regads.

Ответы [ 3 ]

4 голосов
/ 14 февраля 2011

Я предполагаю, что последние новости находятся наверху.

Используйте

(//item)[not(position() > 10)]/*
           [self::title or self::description 
           or self::link or self::pubDate or self::category
           ]

Объяснение

Это выражение выбирает все элементы title, description, link, pubDate и category, являющиеся потомками одного из первых 10 item элементов в документе XML.

Часто задаваемые вопросы и часто совершаемая ошибка - пытаться выбрать первый (или любой элемент позиции, скажем, item):

//item[1]

При этом выбираются все элементы item в документе, которые являются первыми дочерними элементами их родителя, и таких элементов item может быть много.

Выражение XPath, которое выбирает только первый элемент item в документе:

(//item)[1]

Правило запоминания : оператор [] имеет более высокий приоритет (связывает сильнее), чем сокращение //.

2 голосов
/ 14 февраля 2011

Я хочу ограничить свой результат 10 последними новостями

/descendant::item[
   10 > last()-position()
]/*[
   self::title|self::description|self::link|self::pubDate|self::category  
]
0 голосов
/ 14 февраля 2011

вы должны попробовать

//item[position() <= 10]/pubDate

как хочешь 10-й предмет!

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