【发布时间】:2011-06-30 23:06:21
【问题描述】:
我想使用 XMLReader 读取 XML 文件,但在解析过程中每个元素都会调用 END ELEMENT 两次。
<publications>
<article id="Xu86oazdn">
<title>Learning</title>
<authors>
<author>
<firstname>Michel</firstname>
<lastname>Browsky</lastname>
</author>
</authors>
</article>
</publications>
这是解析作者条目的一段代码:
<?php
$xml = new XMLReader();
$xml->open("php://stdin");
$author = null;
while($xml->read()) {
switch($xml->nodeType) {
case XMLReader::ELEMENT:
switch($xml->name) {
case 'author':
echo("+" . $xml->name);
break;
}
case XMLReader::END_ELEMENT:
switch($xml->name) {
case 'author':
echo("-" . $xml->name);
break;
}
}
}
?>
但奇怪的是,每个</author> 都会调用 END_ELEMENT 两次,如回显消息所示:
+author
-author
-author
如果我通过调用 $xml->readOuterXML() 来替换回显消息,则第一个 END_ELEMENT 如下:
<author>
<firstname>Michel</firstname>
<lastname>Browsky</lastname>
</author>
第二个如下:
<author/>
我的代码有什么问题?我是否以错误的方式使用了 END_ELEMENT ?检测结束元素的正确方法是什么?
【问题讨论】: