Столкнулся с этим:
<div>
some text
<!-- this is the hook comment-->
target part 1
target part 2
<!-- this is another comment-->
some other text
</div>
Я пытаюсь получить желаемый результат:
цель часть 1 цель часть 2
Количество комментариев и текстовых элементов неизвестно, но целевой текст всегда идет после комментария, содержащего hook
.Поэтому идея состоит в том, чтобы найти position()
соответствующего comment()
и получить следующий элемент.
Есть несколько предыдущих вопросов о поиске позиции элемента, содержащего определенный текст или по атрибуту , но comment()
- странная утка, и я не могу изменить ответы в этой ситуации.Например, попытка вариации ответов:
//comment()[contains(string(),'hook')]/preceding::*
или использование preceding-sibling::*
ничего не возвращает.
Поэтому я решил попробовать что-то еще.count(//node())
xml возвращает 6
.И //node()[2]
возвращает соответствующий comment()
.Но когда я пытаюсь получить позицию этого комментария, используя index-of()
(который должен вернуть 2
)
index-of(//node(),//comment()[contains(string(),'hook')])
, он возвращает 3
!
Конечно, я могуне обращайте на это внимания и используйте индексную позицию 3
в качестве позиции для целевого текста (вместо увеличения 2
на 1), но мне было интересно, во-первых, почему результат такой, какой он есть, и, во-вторых, имеет ли он какой-либонепреднамеренные последствия.