此包最新版本(dev-master)没有提供许可证信息。

dev-master 2013-04-20 06:46 UTC

This package is not auto-updated.

Last update: 2024-09-24 04:01:36 UTC


README

SPAX的目标是提供一个轻量级、面向对象的基于事件的XML API,用于PHP。

原因?SPL中包含的基于事件的XML API不是面向对象的,并且只有部分命名空间支持。其他SPL XML API是DOM风格的API,通常速度较慢且在大多数情况下过于复杂,这迫使开发者在DOM API之上实现原始且经常脆弱的事件逻辑。

SPAX包含一个不验证的PHP实现,它包装了XMLParser,应在任何环境中都能工作。

用法

要消费XML数据,您需要创建一个实现了Spax\ContentHandler接口的类。最简单的方法是扩展Spax\Helper\DefaultHandler并覆盖您需要的那些方法。

class MyHandler extends Spax\Helper\DefaultHandler {
    public $numElements = 0;

    // override
    public function startElement($uri, $localName, $qName, $atts) {
        // your logic goes here
        $this->numElements++;
        
        echo "start '" . $localName . "' and that makes " . $this->numElements . " open element(s).";
    }

    public function characters($cdata) {
        echo "'$cdata'";
    }

    public function endElement($uri, $localName, $qName) {
        $this->numElements--;
        
        echo "end '" . $localName . "' and that makes " . $this->numElements . " opem element(s).";
    }
}

然后,您可以像这样将您处理器的实例传递给XmlReader。

$xmlReader = new XmlReader();
$handler = new MyHandler();
$xmlReader->setContentHandler($handler);

$xmlReader->parse("c:/path/to/xmlfile.xml");

XML

<html>
    <head>some content in head</head>
    <body>some content in body</body>
</html>

输出

start 'html' and that makes 1 open element(s).
start 'head' and that makes 2 open element(s).
'some content in head'
end 'head' and that makes 1 open element(s). 
start 'body' and that makes 2 open element(s).
'some content in body'
end 'body' and that makes 1 open element(s).
end 'html' and that makes 0 open element(s).

0.0.1

第一个版本仅实现了基本功能。命名空间和属性完全支持,但是单元测试尚不完整,因此这不是一个稳定的版本。解析器目前只能接受文件路径,接受字符串形式的XML是一个高优先级任务。