1

我有一个由 UTF-16 编码的字符串。使用 解析时javax.xml.parsers.DocumentBuilder,出现如下错误:

Character reference "&#x0" is an invalid XML character

这是我用来解析 XML 的代码:

InputSource inputSource = new InputSource();
inputSource.setCharacterStream(new StringReader(xmlString));
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = factory.newDocumentBuilder();
org.w3c.dom.Document document = parser.parse(inputSource);

我的问题是,如何用(空格)替换无效字符?

4

3 回答 3

1

您只需要使用 String.replaceAll 并传递无效字符的模式。

于 2012-08-03T14:41:02.070 回答
0

您正在尝试解析无效xml entity,这就是引发异常的原因。看来您不必担心UTF-16自己的情况。

在这里找到一些解释和示例。

例如,a 不能使用&字符valid xml,我们需要使用&。这&是xml实体。

假设上面的例子应该是不言自明的,以了解什么是 xml 实体。

据我了解,有一些无效的 xml 实体。不过不用再担心了。可以声明和添加新的xml entity。请查看上面的文章以获取更多详细信息。


编辑:假设有&字符使 xml 无效。

于 2012-08-03T14:30:40.337 回答
0

StringEscapeUtils()

逃逸Xml

public static void escapeXml(java.io.Writer writer,
                             java.lang.String str)
                      throws java.io.IOException

Escapes the characters in a String using XML entities.

For example: "bread" & "butter" => "bread" & "butter".

Supports only the five basic XML entities (gt, lt, quot, amp, apos). 
Does not support DTDs or external entities.

Note that unicode characters greater than 0x7f are currently escaped to their 
numerical \\u equivalent. This may change in future releases.

Parameters:
    writer - the writer receiving the unescaped string, not null
    str - the String to escape, may be null 
Throws:
    java.lang.IllegalArgumentException - if the writer is null 
    java.io.IOException - if there is a problem writing
See Also:
    unescapeXml(java.lang.String)
于 2012-08-03T15:19:57.457 回答