3

我有一个 XML 文件 sample.xml,其中包含以下内容:

<Tokens>
   <Token>Hello&nbsp;World</Token>
</Tokens>

我想解析它 - 但是当它到达 NBSP 时会出错

我无权访问我正在使用的 XML 的架构(定义一个或多个令牌的那个)。

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
doc = docBuilder.parse("sample.xml");

由于我的 XML 文档没有 Schema,我想知道是否有办法让它在解析时完全忽略 HTML 特殊字符?

4

4 回答 4

3

在 XML 中,&nbsp;是一个实体引用,但是一个未定义的引用,除非您提供定义。您不能让 XML 解析器忽略它们,但您可以定义它们,例如以

<!DOCTYPE Tokens [<!ENTITY nbsp "&#xa0;">]>

但是,如果您正在生成 XML 文件,这可能没有用。您也可以生成一个包含真实字符“U+00A0 NO-BREAK SPACE”或字符引用&#xa0;或其等效十进制字符的文档&#160;

参照。质疑如何在有效的 XML 文档中定义 HTML 实体引用?

于 2013-10-04T18:36:21.907 回答
0

What you ask for is impossible because to parse ask XML the entity must have a definition somewhere. To parse it as other than XML you need to write your own parser, or use a tolerant parser. XML is not tag soup.

于 2013-10-04T17:56:57.537 回答
0

XML 不支持&nbsp,但 XHTML 支持。检查XML 列表中的预定义实体

&#160解决方案是在构建 XML 时使用 Unicode 不间断空格字符;反而。在某些情况下,一个普通的空间也可以(&#32;)。在解析 XML 之前,您可以尝试&nbsp用 ' '-space 替换。

于 2013-10-04T18:05:19.117 回答
0

我同意里德瓦尔德的观点。但作为一种解决方法,您可以在解析文档之前将文件读取为字符串并用空格替换。

于 2013-10-04T18:07:41.930 回答