密码 / dom-navigator
简单包装,用于在DOMNode中查找元素。增加了XPath、选择器(如jQuery)机制来查找元素,允许创建自己的实现。
v1.0.2
2016-09-07 12:22 UTC
Requires
- php: >=5.4
Requires (Dev)
- ext-curl: *
- phpunit/phpunit: ^4.8.0
This package is auto-updated.
Last update: 2024-09-13 23:16:38 UTC
README
关于库
该库是php中DOM实现的包装。旨在轻松加载HTML文档,并对其进行解析。它允许您实现自己的元素搜索算法。
文档
安装
运行命令
composer require mima/dom-navigator
在composer.json中添加依赖
{ "require": { "mima/dom-navigator": "@stable" } }
使用导航器
开始使用导航器需要创建一个DOMNavigator\Navigator
类的实例
use DOMNavigator\Navigator; use DOMNavigator\Loader\StringLoader; use DOMNavigator\Finder\XPathFinder; $loader = new StringLoader(); $finder = new XPathFinder(); $navigator = new Navigator($loader, $finder);
在搜索文档之前需要加载文档
// For load HTML document call: $navigator->loadHTML($htmlContent); // or call next method for load XML document: $navigator->loadXML($xmlContent);
当您调用方法loadHTML
或loadXML
时,导航器会尝试使用DOMNavigator\Loader\StringLoader
(在本例中)来加载DOMDocument
。加载后,您可以使用navigate方法在文档中搜索元素。
// return \DOMNodeList with list of found elements $addressNodes = $navigator->navigate("//div[@id='address']");
导航方法始终返回\DOMNodeList。您可以在元素上下文中进行搜索
// $addresNodes is a list of element from previous example $cityNodes = $navigator->navigate("*[@id='city']", $addressNodes->item(0));
如果您想找出找到的元素数量,请参考以下示例
if ($cityNodes->length > 0) { ... }
创建自定义查找器
所有查找器都需要实现接口DOMNavigator\Finder\FinderInterface
。
创建自定义加载器
所有加载器都需要实现DOMNavigator\Finder\LoaderInterface
。
使用组合加载器
如果您不确定文档的来源,可以使用组合加载器
use DOMNavigator\Loader\CompositeLoader; use DOMNavigator\Loader\URLLoader; use DOMNavigator\Loader\FileLoader; use DOMNavigator\Loader\StringLoader; $stringLoader = new StringLoader(); $urlLoader = new URLLoader($stringLoader); $fileLoader = new FileLoader(); // set loaders with construct $compositeLoader = new CompositeLoader([$stringLoader, $urlLoader]); // set loader with method $compositeLoader->addLoader($fileLoader);
下一步是将加载器分配给导航器
// as first argument in constructor $navigator = new Navigator($compositeLoader, $finder); // or using a special method $navigator->setLoader($compositeLoader);