我是不正确使用这个.DTD,还是只是误解它应该做什么?

时间:2012-07-23 16:10:42

标签: 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中的这一行应该将此元素声明给浏览器,并允许我在我的xml中使用&amp; nbsp(并通过浏览器的解析器将其扩展到&amp;#160以供显示。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

我知道你说你正在使用数百万个这些文件并且你没有生成它们,但你可以编写更新DOCTYPE声明的脚本并预处理它们。