使用SAX进行XML解析| 如何处理特殊字符?
我们有一个JAVA应用程序,它从SAP提取数据,解析它并呈现给用户。 使用JCO连接器拉取数据。
最近我们被抛出一个例外:
org.xml.sax.SAXParseException: Character reference "�" is an invalid XML character.
因此,我们计划在解析XML之前编写一个新的间接级别,其中替换所有特殊/非法字符。
我的问题是:
- 是否有任何现有的(开源)实用程序可以替换XML中的非法字符?
- 或者如果我必须编写这样的实用程序,我应该如何处理它们?
- 为什么抛出上述exception?
谢谢。
从我的角度来看,源(SAP)应该进行替换。 否则,它传输到您的程序可能看起来像XML,但不是。
将’&’替换为’&’可以通过简单的String.replaceAll(…)替换为字符串from to toXML()调用,其他字符可能更难替换(’<'和'>‘举个例子)。
关于纪尧姆
这听起来像是逃跑中的一个错误。 根据上下文,您可能最好只编写自己的XMLWriter类版本,该类使用真正的XML库,而不是像SAP开发人员那样编写自己的XML实用程序。
或者,查看字符代码&#00,您可以使用空字符串替换全部替换:
String goodXml = badXml.replaceAll("", "");
我有一个相关但相反的问题 ,我试图将字符1插入到XSLT转换的输出中。 我考虑使用零替换标记的后处理,而是选择使用xsl:param。
如果我在你的情况下,我要么想出一个定制的编码,替换XML中无效的字符,并在解析时将它们作为特殊情况处理,或者如果可能的话,用空格替换它们。
我没有JCO的经验,所以不能建议我如何或在哪里替换无效字符。
您可以使用Apache Commons Lang类StringEscapeUtils escapeXML方法对XML中的非ASCII字符进行编码/解码。 看到:
http://commons.apache.org/lang/api-2.4/index.html
要了解XML字符引用的工作原理,请在维基百科上搜索“数字字符引用”。