2014-02-18 4 views
0

Иметь такой XML:XPath Топоры: Как выбрать текст между <br/> узлами

<td> 
    text1 
    <br/> 
    text2 
    <br/> 
    text3 
    <br/> 
    text4 
    <br/> 
</td> 

Хотите выбрать text1 text2 text3 text4с пробелами или CRLF между ними. Если я выберу string(/td), то он выбирает text1text2text3text4. Если я выберу string(/td/text()), он выбирает только text1. Как выбрать весь текст, но с промежутками между ними?

+1

Ну, строковое значение элемента элемента td' должно быть всем текстом, включая пробел, я не вижу, как вы получите только буквы 'text1text2text3text4' без какого-либо пробела с помощью' string (td) '. Можете ли вы рассказать нам более подробную информацию о движке XPath, который вы используете? –

ответ

1

Вы не можете выбрать string(node-set), потому что string() преобразует первый узел от аргумента в строку только.

Следовательно, вы получаете '\n text1' от string(td/text()).

Просто используйте td/text(), и вы получите пять (!) Не четырех текстовых узлов.

+0

спасибо. уже решена. – Archer

+0

Подсказка: используйте 'td/text() [normalize-space()]', чтобы избавиться от узлов с пробелами. ('normalize-space()' сворачивает whitespace-only в пустую строку, а пустая строка 'false' в булевом контексте) – Tomalak

+0

Спасибо. Будет так. – Archer

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