|
|
|
xpath и текстовая нода
|
|||
|---|---|---|---|
|
#18+
Если предположить на секундочку, что у нас есть такой xml <root> <elem>что-то</elem> где-то </root> какой xpath у "где-то"? Пишу /root получаю что-то где-то Пишу /root[text()], получаю то же самое. Даже /root/self::*[text()] работает не так, как я ожидаю. Где я дурак? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2007, 17:57 |
|
||
|
xpath и текстовая нода
|
|||
|---|---|---|---|
|
#18+
joshuaЕсли предположить на секундочку, что у нас есть такой xml <root> <elem>что-то</elem> где-то </root> какой xpath у "где-то"? Пишу /root получаю что-то где-то Пишу /root[text()], получаю то же самое. Даже /root/self::*[text()] работает не так, как я ожидаю. Где я дурак? У тебя текст между нодами, что само по себе ошибка. xml конечно пофиг, но синтаксически не верно. если надо выражение используй это: /root[text()] - но с оговоркой что между текстом и корневым узлом нодов нет, или что родительским узлом для текста является корневой элемент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2007, 07:13 |
|
||
|
xpath и текстовая нода
|
|||
|---|---|---|---|
|
#18+
Чтоб получить текст "где-то" из такой структуры: Код: plaintext 1. 2. 3. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 10:09 |
|
||
|
xpath и текстовая нода
|
|||
|---|---|---|---|
|
#18+
SuSa, спасибо. На самом деле, если поставить текстовую ноду первой все получается. А вот второй совет работает только после перестановок. И мне непонятно, почему все происходит именно так. После ужасных раздумьев получилось только /root/text()[position()=last()] что, безусловно, ужОс :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 22:03 |
|
||
|
xpath и текстовая нода
|
|||
|---|---|---|---|
|
#18+
joshuaSuSa, спасибо. На самом деле, если поставить текстовую ноду первой все получается. А вот второй совет работает только после перестановок. И мне непонятно, почему все происходит именно так. После ужасных раздумьев получилось только /root/text()[position()=last()] что, безусловно, ужОс :( Если напишешь вот так: Код: plaintext Код: plaintext 1. 2. 3. Если текст с тегом поменяешь, то строчки в результате также поменяются местами. ф-ция normalize-space() не поможет, но даст подсказку почему она не может. Выводы можешь сделать сам :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 09:22 |
|
||
|
xpath и текстовая нода
|
|||
|---|---|---|---|
|
#18+
joshuaSuSa, спасибо. На самом деле, если поставить текстовую ноду первой все получается. А вот второй совет работает только после перестановок. И мне непонятно, почему все происходит именно так. Если глянуть в доку : The xsl:value-of element is instantiated to create a text node in the result tree. The required select attribute is an expression; this expression is evaluated and the resulting object is converted to a string as if by a call to the string function. и далее The string function converts an object to a string as follows: A node-set is converted to a string by returning the string-value of the node in the node-set that is first in document order . А у вас естественно 2 текстовых узла: 1ый - это перевод строки, потом идет elem, потом 2ой текстовый узел - перевод строки + "где-то" + перевод строки. Хорошо видно если сделать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. joshuaПосле ужасных раздумьев получилось только /root/text()[position()=last()] что, безусловно, ужОс :( Поэтому, во-первых, надо собирать все текстовые узлы (в этом поможет copy-of который подряд идущие на выходе текстовые узлы собирает в один), а во-вторых, отсеивать лишние "пустые": Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 09:40 |
|
||
|
xpath и текстовая нода
|
|||
|---|---|---|---|
|
#18+
Не сильно понял нафига нужен был цикл, но! если текст между тегов встречается только один раз, то можно обойтись вот такой конструкцией: Код: plaintext Если больше, то лучше циклом и тем способом что предложил TiG. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 10:03 |
|
||
|
|

start [/forum/topic.php?fid=14&msg=34721825&tid=1334191]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 143ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...