Скажем, я хочу захватить первый абзац на этой странице википедии . Как получить основной текст между полем заголовка и содержимого с помощью XPath или DOM и PHP или чего-то подобного?
Есть ли для этого php-библиотека? Я не хочу использовать api, потому что он немного сложный.
Примечание. Мне просто нужно добавить виджет под моими страницами, который отображает соответствующую информацию из Википедии.
Используйте следующее выражение XPath:
/*/h:body//h:h1 | /*/h:body//h:h1/following::node() [count(. | //h:table[@id='toc'] /preceding::node() ) = count(//h:table[@id='toc'] /preceding::node() ) ]
Здесь префикс h:
связан с пространством имен XHTML ( "http://www.w3.org/1999/xhtml"
).
Это преобразование показывает, что желаемый результат действительно создается :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:h="http://www.w3.org/1999/xhtml" > <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="/"> <xsl:copy-of select= "/*/h:body//h:h1 | /*/h:body//h:h1/following::node() [count(. | //h:table[@id='toc'] /preceding::node() ) = count(//h:table[@id='toc'] /preceding::node() ) ] "/> </xsl:template> </xsl:stylesheet>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:h="http://www.w3.org/1999/xhtml" > <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="/"> <xsl:copy-of select= "/*/h:body//h:h1 | /*/h:body//h:h1/following::node() [count(. | //h:table[@id='toc'] /preceding::node() ) = count(//h:table[@id='toc'] /preceding::node() ) ] "/> </xsl:template> </xsl:stylesheet>
При запуске на XHTML-документе статьи в Википедии (вам также необходимо определить два объекта
и ®
для этого документа), будет получен желаемый результат.