【问题标题】:XML file with ä带有 ä 的 XML 文件
【发布时间】:2015-08-24 05:54:25
【问题描述】:

我有一个大致如下所示的 XML 文件:

<customer>
    <name>M&uuml;ller</name>
</customer>

我使用以下代码解析文件:

File xmlFile = new File("file.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile)

并得到实体&amp;uuml;被引用但未声明的错误。我想要的是该条目正在被读取但未以任何方式解析,我想获取写入文件中的值。

我该怎么做?

【问题讨论】:

  • 我有同样的问题好几个星期了。但我没有找到一个好的解决方案。我已经使用 xslt 转换将 html 实体转换为 xml 实体,然后解析修改后的文件。
  • XML 是否引用了定义该实体的 DTD,或者 XML 本身是否存在问题?
  • 出现错误的原因是&amp;uuml; 不是标准的XML 实体引用。在 XML 中,只有five standard entity references&amp;amp;&amp;quot;&amp;apos;&amp;lt;&amp;gt&amp;uuml; 之类的东西是 HTML 实体引用,但它们没有在 XML 中定义。

标签: java xml


【解决方案1】:

我试过设置:

dbFactory.setExpandEntityReferences(false);

但这不起作用。

如果您无法修改 xml 内容(使用 UTF-8,xml 可以包含 u 变音符号),您也许可以添加 DTD:

<!DOCTYPE definition [
<!ENTITY uuml "&#xfc;">
]>

如果您无法修改 xml 文件,请加载 xml 内容并添加 DTD:

String dtd = "<!DOCTYPE definition [\n<!ENTITY uuml '&#xfc;'>\n]>\n",
            contents = <load xmlFile>;
Reader reader = new StringReader(dtd + contents);
InputSource src = new InputSource(reader);
Document doc = dBuilder.parse(src);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多