与DTD冲突

时间:2013-05-05 10:19:09

标签: xml dtd xml-entities

我觉得用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():   文件:/// C:/wamp/www/forge/Path/datas.xml:2:   解析器错误:StartTag:无效的元素名称

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

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