我是错误地使用了这个.DTD,还是误解了它应该做什么

  • 本文关键字:误解 DTD 错误 xml dtd
  • 更新时间 :
  • 英文 :


感谢阅读我的问题。我搜索并阅读过类似的问题,但没有一个能很好地解释发生了什么

我有一个XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="../wikiStyle.css"?>
<!DOCTYPE article SYSTEM "../article.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
    <header>
        <title>Foreign relations of Malta</title>
        <id>19146</id>
    </header>
    <bdy>
        <link xlink:type="simple" xlink:href="../205/40205.xml">Albania</link>&nbsp;·
        <link xlink:type="simple" xlink:href="../588/67588.xml">Andorra</link>&nbsp;· 
    </bdy>
</article>

正如你所看到的;我引用了.dtd文件,其中包含如下定义:

<!ENTITY nbsp   "&#160;"> <!-- no-break space = non-breaking space,
                                  U+00A0 ISOnum -->

我的目标是在浏览器中可读地显示这个.xml文件。CSS完美地管理了这一点,除了.xml文件,比如这个文件,其中包含nbsp

在这种情况下,我会得到一个错误,如:

XML Parsing Error: undefined entity
10.1126/science.288.5472.1775</weblink>. PMID 10877698.</cite>&nbsp;</entry>
--------------------------------------------------------------^

据我所知,.dtd中的这一行应该向浏览器声明这个元素,并使我能够使用&nbsp在我的xml中(并通过浏览器的解析器将其扩展到 以进行显示。

  • 我对应该发生什么的理解是否正确,或者我错过了什么
  • 如何声明此元素以便浏览器可以显示它

请注意:我正在处理数百万个这样的XML文件,并且我不生成它们。我需要一个不涉及更改.xml文件本身的解决方案。

您的实体声明看起来不错,所以可能是浏览器没有加载外部DTD的问题。(例如:https://developer.mozilla.org/en/XML_in_Mozilla)

我认为处理这个问题的唯一方法是将实体声明添加到每个文件的内部子集:

<!DOCTYPE article [
<!ENTITY nbsp "&#160;"> <!-- no-break space = non-breaking space,
                                  U+00A0 ISOnum -->
]>

我知道你说过你正在处理数百万个这样的文件,但你没有生成它们,但你可能可以编写DOCTYPE声明的更新脚本并对它们进行预处理。

最新更新