mindplay/easyxml

采用函数式方法的 XML 解析器

1.0.1 2015-01-13 22:36 UTC

This package is auto-updated.

Last update: 2024-08-25 19:35:53 UTC


README

Build Status

Scrutinizer Code Quality

Code Coverage

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",了解如何使用此功能的更多示例。