使用SAX进行XML解析|如何处理特殊字符?

时间:2010-03-18 06:09:38

标签: java parsing sap sax xml-parsing

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

最近我们被抛出异常:

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

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

我的问题是:

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

4 个答案:

答案 0 :(得分:1)

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

取代'&'通过'&'可以通过一个简单的String.replaceAll(...)来完成从字符串到toXML()调用,其他字符可能更难以替换(例如'<'和'>')。

问候 纪尧姆

答案 1 :(得分:1)

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

或者,查看字符代码&#00,您可以使用空字符串替换所有内容:

String goodXml = badXml.replaceAll("�", "");

答案 2 :(得分:0)

我有一个related, but opposite problem,我试图将字符1插入到XSLT转换的输出中。我考虑使用零替换标记的后处理,而是选择使用xsl:param。

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

我没有JCO的经验,所以不能建议我如何或在哪里替换无效字符。

答案 3 :(得分:0)

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

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

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