我有一个Java应用程序,它从db导出数据;处理一些字段并将其重新加载到另一个数据库中进行测试。

应用程序使用的表中的某些字段最近被加密,此后,当应用程序尝试操纵以xml文件形式导出的数据时,该应用程序将引发异常。下面是堆栈跟踪

    java.lang.Exception: Error Parsing String
    at com.oocl.frm.xmlutil.xmlbeans.XmlBeansUtil.unmarshall(XmlBeansUtil.java:37)
    at com.oocl.automation.object.DataSet.<init>(DataSet.java:12)
    at com.oocl.automation.process.BaseProcess.process(BaseProcess.java:21)
    at com.oocl.automation.TestAutomation.main(TestAutomation.java:30)
Caused by: org.apache.xmlbeans.XmlException: error: Character reference to illegal XML character
org.apache.xmlbeans.impl.piccolo.io.IllegalCharException: Character reference to illegal XML character
    at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseEncodedChar(PiccoloLexer.java:3131)
    at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.yylex(PiccoloLexer.java:4899)
    at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yylex(Piccolo.java:1290)
    at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yyparse(Piccolo.java:1400)
    at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.parse(Piccolo.java:714)
    at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3435)
    at org.apache.xmlbeans.impl.store.Locale.parse(Locale.java:706)
    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:690)
    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:677)
    at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:208)
    at org.apache.xmlbeans.XmlObject$Factory.parse(XmlObject.java:579)
    at com.oocl.frm.xmlutil.xmlbeans.XmlBeansUtil.unmarshall(XmlBeansUtil.java:35)
    at com.oocl.automation.object.DataSet.<init>(DataSet.java:12)
    at com.oocl.automation.process.BaseProcess.process(BaseProcess.java:21)
    at com.oocl.automation.TestAutomation.main(TestAutomation.java:30)

    at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3467)
    at org.apache.xmlbeans.impl.store.Locale.parse(Locale.java:706)
    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:690)
    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:677)
    at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:208)
    at org.apache.xmlbeans.XmlObject$Factory.parse(XmlObject.java:579)
    at com.oocl.frm.xmlutil.xmlbeans.XmlBeansUtil.unmarshall(XmlBeansUtil.java:35)
    ... 3 more
Caused by: org.xml.sax.SAXParseException; systemId: file:; lineNumber: 39313; columnNumber: 657; Character reference to illegal XML character


有什么方法可以使xml解析器处理或排除这些非法字符?我在任何地方都找不到合适的答案。

任何帮助是极大的赞赏。

我的xml版本是
我尝试使用1.1,但效果不佳。同样,引发异常的字符是;&#3。

最佳答案

您的问题似乎在这里(第39313行,第657列):

Caused by: org.xml.sax.SAXParseException; systemId: file:; lineNumber: 39313; columnNumber: 657; Character reference to illegal XML character


如果您的XML中包含特殊字符,并且之前已经对其进行了解析,则它可能是XML 1.0中非法的字符(例如,在XML 1.1中可能不是非法的-请检查文件XML标头中的版本,或者配置您的解析器以将其视为XML 1.1)。

更新:我看到您的实现使用Piccolo解析器。在2007年,有一个bug报告(但现在可能已经修复了)。无论如何,值得检查您正在使用哪个版本以及该错误的当前状态。解析时,您可能需要使用其他解析器或忽略有问题的字符。

10-08 03:02