java 用SAX解析XML|如何处理特殊字符?

uinbv5nw  于 2023-06-28  发布在  Java
关注(0)|答案(4)|浏览(224)

我们有一个JAVA应用程序,可以从SAP系统中提取数据,解析数据并呈现给用户。使用SAP JCo连接器提取数据。
最近我们抛出了一个异常:
org.xml.sax.SAXParseException:字符引用“&#00”是无效的XML字符。
因此,我们计划编写一个新的间接层,在解析XML之前替换所有特殊/非法字符。
我的问题是:
1.是否有任何现有的(开放源码)实用程序可以完成替换XML中非法字符的工作?
1.或者如果我必须编写这样的实用程序,我应该如何处理它们?
1.为什么会抛出上述异常?
谢谢。

vi4fp9gy

vi4fp9gy1#

从我的Angular 来看,源(SAP)应该做的更换。否则,它传输给程序的内容可能看起来像XML,但实际上不是。
虽然将'&'替换为'&'可以通过简单的String.replaceAll(...)对字符串from to toXML()调用来完成,但其他字符可能更难替换(例如'<'和'>')。
关于Guillaume

anauzrmj

anauzrmj2#

这听起来像是他们逃跑时的一个bug。根据上下文的不同,您最好编写自己版本的XMLWriter类,它使用真实的的XML库,而不是像SAP开发人员那样编写自己的XML实用程序。
或者,查看字符代码&#00,您可能可以使用空字符串替换所有字符:

String goodXml = badXml.replaceAll("&#00;", "");
up9lanfz

up9lanfz3#

我有一个related, but opposite problem,我试图在XSLT转换的输出中插入字符1。我考虑过在后处理中用零替换标记,但还是选择使用xsl:param。
如果我处在你的情况下,我要么想出一个定制的编码,替换XML中无效的字符,并在解析中将它们作为特殊情况处理,或者如果可能的话,用空格替换它们。
我没有使用JCO的经验,所以不能建议如何或在哪里替换无效字符。

xeufq47z

xeufq47z4#

您可以使用Apache Commons Lang类StringEscapeUtils escapeXML方法对XML中的非ASCII字符进行编码/解码。参见:
http://commons.apache.org/lang/api-2.4/index.html
要了解XML字符引用是如何工作的,请在维基百科上搜索“数字字符引用”。

相关问题