Получение узлов под конкретным элементом узла

Мне нужна помощь с моей проблемой здесь или хотя бы несколько советов. Я анализирую HTML-документ с использованием HTMLcleaner с использованием XPATH.

У меня есть что-то вроде этого:

<html>

[code and other <h4> tags]

<h4>Random name</h4>
<a href="link" target="target"> Text I want to get </a>
<a href="link2" target="target2"> Text I want to get 2 </a>
<a href="link3" target="target3"> Text I want to get 3 </a>
<a href="link4" target="target4"> Text I want to get 4 </a>
<h4> Random name 2 </h4>
<a href="link" target="target"> Text I don't want to get </a>


[code and other <h4> tags]
</html>

Хорошо. У меня есть несколько <h4> теги, каждый из которых с <a> теги и некоторый текст. Моя проблема в том, что я не знаю, как получить весь соответствующий текст из конкретного, как "h4[i]". Я попробовал что-то вроде этого, но это не сработало:

String xpath = "h4["+number+"]//a" //where number will increment

Спасибо в советах за помощь!

1 ответ

Используйте:

/*/h4[1]/following-sibling::a[not(preceding-sibling::h4[2])]/text()

Проверка на основе XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
   <xsl:copy-of select=
   "/*/h4[1]/following-sibling::a[not(preceding-sibling::h4[2])]/text()"/>
 </xsl:template>
</xsl:stylesheet>

Когда это преобразование применяется к следующему документу XML (предоставленному фрагменту, обернутому в один верхний элемент, чтобы стать правильно сформированным документом XML):

<html>
    <h4>Random name</h4>
    <a href="link" target="target"> Text I want to get </a>
    <a href="link2" target="target2"> Text I want to get 2 </a>
    <a href="link3" target="target3"> Text I want to get 3 </a>
    <a href="link4" target="target4"> Text I want to get 4 </a>
    <h4> Random name 2 </h4>
    <a href="link" target="target"> Text I don't want to get </a>
</html>

Выражение Xpath вычисляется, и все выбранные (текстовые) узлы копируются в вывод:

 Text I want to get  Text I want to get 2  Text I want to get 3  Text I want to get 4 
Другие вопросы по тегам