我们有一个JAVA应用程序,它从SAP提取数据,解析它并呈现给用户。 使用JCO连接器拉取数据。
最近我们被抛出异常:
org.xml.sax.SAXParseException: Character reference "�" is an invalid XML character.
因此,我们计划在解析XML之前编写一个新的间接级别,其中替换所有特殊/非法字符。
我的问题是:
谢谢。
答案 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字符引用的工作原理,请在维基百科上搜索“数字字符引用”。