我已将我的 zend 框架版本从 1.11 切换到 1.12.3 在测试中,我检测到一个我无法解释的奇怪错误。我有一些对我大喊大叫的 xml 获取和处理例程。
PHP Fatal error: Uncaught exception 'Zend_Dom_Exception' with message
'Invalid XML: Detected use of illegal DOCTYPE' in ....
在 zend 框架 1.11 中,我有 library/Zend/Dom/Query.php:197:
switch ($type) {
case self::DOC_XML:
$success = $domDoc->loadXML($document);
break;
....
在 1.12 中,代码看起来很奇怪
switch ($type) {
case self::DOC_XML:
$success = $domDoc->loadXML($document);
foreach ($domDoc->childNodes as $child) {
if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) {
require_once 'Zend/Dom/Exception.php';
throw new Zend_Dom_Exception(
'Invalid XML: Detected use of illegal DOCTYPE'
);
}
}
break;
.....
如果我做对了,这个例程将不会用 doctype 解析 doc xml。在我的计算机上一直失败的小例子:
require_once 'Zend/Dom/Query.php';
$f = '<?xml version="1.0" standalone="yes"?>' .
'<!DOCTYPE hallo [<!ELEMENT hallo (#PCDATA)>]>' .
'<hallo>Hallo Welt!</hallo>';
$dom = new Zend_Dom_Query($f);
$results = $dom->queryXpath('//hallo');
谁可以给我解释一下这个???我测试了 Zend Framework 1.12.3 和 php 5.3.2 和 5.4.6