startdaemons / spax
此包最新版本(dev-master)没有提供许可证信息。
dev-master
2013-04-20 06:46 UTC
Requires
- php: >=5.3.3
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是一个高优先级任务。