netlogix / xml-processor
基于XMLReader的PHP XML-Processor
1.1.0
2023-04-06 08:17 UTC
Requires
- php: ^7.4 || ^8.0
- ext-xmlreader: *
Requires (Dev)
- behat/behat: ^3.12.0
- phpunit/phpunit: ^9.6.6
This package is auto-updated.
Last update: 2024-09-04 11:40:23 UTC
README
PHP XML-Processor基于XMLReader。
XMLProcessor
使用\XMLReader
遍历XML文件,并在\XMLReader
的每个节点上触发事件。因此,它易于处理大型XML文件,同时内存使用量低。
事件
以下事件可用
如何使用
要处理XML文件,您需要创建一个nodeProcessor类。它必须实现NodeProcessorInterface
。
您可以在其中定义NodeProcessorInterface::getSubscribedEvents
,指定您想要响应的事件。
为了更方便地使用,您可以扩展AbstractNodeProcessor
类并实现以下接口之一
示例
要从以下XML中提取所有<value>
节点的值
file.xml
<?xml version="1.0" encoding="UTF-8"?> <root> <value>foo</value> <value>bar</value> <value>baz</value> </root>
创建一个简单的nodeProcessor类,收集所有<value>
节点的值。
OpenTestNodeProcessor.php
use Netlogix\XmlProcessor\NodeProcessor\AbstractNodeProcessor; use Netlogix\XmlProcessor\NodeProcessor\OpenNodeProcessorInterface; use Netlogix\XmlProcessor\NodeProcessor\Context\OpenContext; class OpenValueNodeProcessor extends AbstractNodeProcessor implements OpenNodeProcessorInterface { const NODE_PATH = 'value'; private $nodeValues = []; public function openElement(OpenContext $context) { $xml = $context->getXmlProcessorContext()->getXmlReader(); $node = $xml->expand(); $this->nodeValues[] = $node->nodeValue; } function getNodeValues(): array { return $this->nodeValues; } }
创建XmlProcessor
类的新实例,并附加新的nodeProcessor。
require_once 'OpenTestNodeProcessor.php'; require_once 'vendor/autoload.php'; $valueNodeProcessor = new OpenValueNodeProcessor(); $processor = new XMLProcessor([$valueNodeProcessor]); $processor->processFile('file.xml'); var_dump($valueNodeProcessor->getNodeValues());
结果
array(3) { [0]=> string(3) "foo" [1]=> string(3) "bar" [2]=> string(3) "baz" }