mindplay / easyxml
采用函数式方法的 XML 解析器
1.0.1
2015-01-13 22:36 UTC
Requires
- php: >=5.3.0
Requires (Dev)
- mindplay/benchpress: @dev
- phpunit/php-code-coverage: 2.*@dev
This package is auto-updated.
Last update: 2024-08-25 19:35:53 UTC
README
PHP 5.3+ 的函数式 XML-读取器。
以不同方式读取/解析 XML 文件的方法,使用匿名函数(闭包)的层次结构,反映了 XML 文档本身的层次结构。
当读取结构化的 XML 文档时很有用,例如具有可预测结构的 XML 文档。当读取无结构文档,如 XHTML 文档时,可能不那么有趣。
解析是实时发生的,例如避免将整个文档加载到内存中并对其执行重复查询的开销。这种方法内存效率高,允许您以流式处理的方式解析非常大的文档 - 它不是超级快(在我的笔记本电脑上吞吐量约为 500 KB/sec),但 XML 解析永远不是真正快速的,所以您绝对应该始终缓存解析结果。
用法
假设您希望读取以下 XML 文件
<?xml version="1.0" encoding="UTF-8"?> <cats> <cat name="whiskers"> <kitten name="mittens"/> </cat> <cat name="tinker"> <kitten name="binky"/> </cat> </cats>
您的读取器可能看起来像这样
$doc = new Parser(); $doc['cats/cat'] = function (Visitor $cat, $name) { echo "a cat named: {$name}\n"; $cat['kitten'] = function ($name) { echo "a kitten named: {$name}\n"; }; }; $doc->parseFile('my_cats.xml');
输出将是这样的
a cat named: whiskers
a kitten named: mittens
a cat named: tinker
a kitten named: binky
如果不明显,路径 cats/cat
表示在 <cats>
节点内的 <cat>
节点。
您还可以匹配文本节点,例如路径 foo/bar#text
将匹配 <foo><bar>YO</bar></foo>
中的 YO
。
最后,如果需要,您可以使用 #end
来匹配关闭标签。
顺便说一句,我实际上没有猫 - 但如果我有,那些名字肯定就是它们的。
请参阅 "test.php" 和 "example/cd_catalog.php",了解如何使用此功能的更多示例。