3

我们有一个 JAVA 应用程序,它从 SAP 中提取数据,对其进行解析并呈现给用户。使用 JCO 连接器提取数据。

最近我们被抛出了一个异常:

org.xml.sax.SAXParseException: Character reference "&#00" is an invalid XML character.

因此,我们计划编写一个新的间接级别,在解析 XML 之前替换所有特殊/非法字符。

我的问题是:

  1. 是否有任何现有的(开源)实用程序可以完成替换 XML 中的非法字符的工作?
  2. 或者如果我必须编写这样的实用程序,我应该如何处理它们?
  3. 为什么会抛出上述异常?

谢谢你。

4

4 回答 4

1

从我的角度来看,源(SAP)应该进行替换。否则,它传输到您的程序的内容可能看起来像 XML,但不是。

虽然用 '&' 替换 '&' 可以通过简单的 String.replaceAll(...) 到字符串 from to toXML() 调用来完成,但其他字符可能更难替换('<' 和 '>'举个例子)。

关于纪尧姆

于 2010-03-18T14:32:04.503 回答
1

这听起来像是他们逃跑的错误。根据上下文,您最好只编写自己版本的使用真正 XML 库的 XMLWriter 类,而不是像 SAP 开发人员那样尝试编写自己的 XML 实用程序。

或者,查看字符代码 �,您也许可以将其全部替换为空字符串:

String goodXml = badXml.replaceAll("&#00;", "");
于 2010-03-18T15:46:20.413 回答
0

您可以使用 Apache Commons Lang 类 StringEscapeUtils escapeXML 方法对 XML 中的非 ASCII 字符进行编码/解码。看:

http://commons.apache.org/lang/api-2.4/index.html

要了解 XML 字符引用的工作原理,请在 wikipedia 上搜索“数字字符引用”。

于 2010-11-10T10:27:25.883 回答
0

我有一个相关但相反的问题,我试图将字符 1 插入到 XSLT 转换的输出中。我考虑过用零替换标记的后处理,但选择使用 xsl:param。

如果我遇到你的情况,我会想出一个定制的编码,替换 XML 中无效的字符,并在你的解析中将它们作为特殊情况处理,或者如果可能的话,用空格替换它们。

我没有使用 JCO 的经验,因此无法就如何或在何处替换无效字符提出建议。

于 2010-03-18T12:47:51.177 回答