4

我正在解析以下内容...

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tox:message SYSTEM "http://tox.sf.net/tox/dtd/tox.dtd">
<tox:message xmlns:tox="http://tox.sourceforge.net/">
<tox:model owner="scott" package="queue" function="appendFact">
<tox:parameter value="  By John Smith   &ndash; Thu Feb 25, 4:54 pm ET&lt;br&gt;&lt;br&gt;NEW YORK (Reuters) &ndash; Nothing happened today."/>
<tox:parameter value="10245"/>
</tox:model>
</tox:message>

...使用 saxon9.jar,但得到了...

org.xml.sax.SAXParseException: The entity "ndash" was referenced, but not declared.

如何“声明”解析的实体?我如何能够预测所有潜在的实体?

4

2 回答 2

1

您在 DTD 中声明它。由于您使用的是外部 DTD,因此它必须为您声明它。tox.dtd 是否包含 ndash 的声明?

如果没有,您需要做一些受以下启发的事情:

<!DOCTYPE foo [
    <!ENTITY % MathML SYSTEM "http://www.example.com/MathML.dtd">
    %MathML;
    <!ENTITY % SpeechML SYSTEM "http://www.example.com/SpeechML.dtd">
    %SpeechML;
]>

例如,您可以使用定义 ndash 的标准 XHTML dtds 之一。

如果 tox.dtd 确实声明了它,那么您需要一个解析器来找到它。

于 2010-03-10T00:41:44.227 回答
0

我认为你应该使用EntityResolver

于 2010-03-10T00:36:18.340 回答