【问题标题】:Conflict with DTD与 DTD 冲突
【发布时间】:2013-04-29 07:25:50
【问题描述】:

我感觉真的误解了带有 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:无效元素名称

感谢您的帮助!

【问题讨论】:

    标签: xml dtd xml-entities


    【解决方案1】:

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

    【讨论】:

    • 好的,谢谢你的精确。我一直在互联网上搜索一种使用 XML 制作废弃包含的正确方法。简而言之,我在其中包含了目录和 XML 文件的树状结构。在每个剧目中,我想要一个文件,递归地包含他的剧目的所有文件。如果我没有找到解决方案,我将使用 PHP。
    • 你看过 XInclude 吗?
    • 太棒了!谢谢 !我想知道为什么我的书没有提到它,但那是因为它太旧了!无论如何,这是一本很棒的书,但现在我会关注“新闻”,或者会买一本更新的书。我使用类 DOMDocument 来完成 PHP 中的包含,因为 SimpleXML 似乎无法处理它。再次感谢你的帮助。很棒的社区。​​span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 2013-10-21
    • 2020-08-19
    • 2010-12-10
    • 2018-04-02
    • 2021-10-23
    • 2020-12-03
    相关资源
    最近更新 更多