1

我感觉真的误解了带有 XML 的 DTD:

在一个 XML 文件(它有一个 doctype)中,我在一个实体中包含了另一个 XML 文件(它也有一个 doctype)。我的解析器对此很生气。

我知道问题出在 Doctype 上,因为如果我删除它,一切都会好起来的。但我可以不用它,我需要一个最终的 XML 文件,方法是包含其他 XML 文件。

这是 /datas.xml :

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE datas [
    <!ENTITY Path_datas SYSTEM "Path/datas.xml" >
]>
<datas>
    &Path_datas;
</datas>

这是 /Path/datas.xml :

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE oolodatas [
    <!ENTITY Local_DefaultProject_Box_datas SYSTEM "Local/DefaultProject/Box/datas.xml" >
]>
<datas>
    <box>
        LOL
    </box>
</datas>

所以在一个 PHP 文件中我这样做:

$datas = simplexml_load_file(realpath('maforge/datas/datas.xml'), NULL, LIBXML_NOENT);
var_dump($datas->asXML());

这里是我得到的错误:

SCREAM:(!)忽略错误抑制警告:simplexml_load_file():file:///C:/wamp/www/forge/Path/datas.xml:2:解析器错误:StartTag:无效元素名称

谢谢你的帮助!

4

1 回答 1

2

DOCTYPE 声明只能出现在主 XML 文档(“文档实体”)中,不能出现在包含的文档(“外部实体”)中。

于 2013-05-05T11:45:30.233 回答