0

感谢您阅读我的问题。我已经搜索并阅读了类似的问题,但没有一个能完全解释发生了什么。

我有一个 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 中使用   (并通过浏览器的解析器将其扩展为   以进行显示。

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

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

4

1 回答 1

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 声明的更新脚本并对其进行预处理。

于 2012-07-23T18:07:07.840 回答