Получение узлов под конкретным элементом узла
Мне нужна помощь с моей проблемой здесь или хотя бы несколько советов. Я анализирую 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