XPath с Java - выбор текстового значения между вложенными тегами - PullRequest
4 голосов
/ 15 февраля 2011

Я работаю над этим фрагментом HTML:

<p class="pageSelector">
    <a href="/BlaBla">&lt; Prev</a>&nbsp;
    <a href="/BlaBla">1</a>&nbsp;
    <a href="/BlaBla">2</a>&nbsp;
    <a href="/BlaBla">3</a>&nbsp;
    4&nbsp;
    <a href="/BlaBla">5</a>&nbsp;
    <a href="/BlaBla">6</a>&nbsp;
    <a href="/BlaBla">Next &gt;</a>&nbsp;
</p>

отображается (более или менее) как <Предыдущая 1 2 3 <strong>4 5 6 Следующая> .

Я хочу выбрать «4», потому что мне нужно открыть «текущую» страницу. Использование

//p[@class='pageSelector']/text()[normalize-space()]

(протестировано с Firefox XPath Ckecker) Думаю, я решил, но нет, потому что я получил 7 матчей.

Кто-нибудь может сказать мне, где я не прав? Спасибо

Ответы [ 2 ]

3 голосов
/ 15 февраля 2011

normalize-space удаляет пробелы, но символ «без пробелов» (несмотря на его внешний вид) не считается пробелом для этой цели. Так что я бы сделал

text()[translate(., '&#x20;&#x09;&#x0a;&#x0d;&#xa0;', '')]

, который вернет вам те дочерние текстовые узлы, которые содержат символ, отличный от пробела или без пробела; Затем вам может потребоваться обработать это дальше, чтобы извлечь часть содержимого, которое вы хотите.

0 голосов
/ 15 февраля 2011

если вы используете xslt, вы можете применить дополнительный шаблон к тегам a, используя

<xsl:template match="p[@class='pageSelector']/a/text()[normalize-space()]">
</xsl:template>

это будет означать, что у вас осталось только 4

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