使用 Apache POI 读取 excel 的xlxs后缀文件时出现 SAXNotRecognizedException
java.lang.RuntimeException: http://xml.org/sax/properties/declaration-handler
at org.apache.xmlbeans.impl.store.Locale$SaxLoader.<init>(Locale.java:3397)
at org.apache.xmlbeans.impl.store.Locale$XmlReaderSaxLoader.<init>(Locale.java:3087)
at org.apache.xmlbeans.impl.store.Locale.getSaxLoader(Locale.java:3072)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1272)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1259)
at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)
...
Caused by: org.xml.sax.SAXNotRecognizedException: http://xml.org/sax/properties/declaration-handler
at org.apache.harmony.xml.ExpatReader.setProperty(ExpatReader.java:168)
at org.apache.xmlbeans.impl.store.Locale$SaxLoader.<init>(Locale.java:3391)
设置下XML 解析器选项试试
System.setProperty("javax.xml.parsers.SAXParserFactory", "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl");
【以下回答由 GPT 生成】
这个问题是因为Android系统自带的XML解析器无法识别http://xml.org/sax/properties/declaration-handler
属性,而Apache POI库依赖该属性进行解析操作。
为了解决这个问题,我们可以使用一个兼容性更好的XML解析器,比如XMLBeans
。下面是解决该问题的步骤:
XMLBeans
库。可以在项目的build.gradle
文件中添加以下依赖项:implementation 'org.apache.xmlbeans:xmlbeans:3.1.0'
org.apache.xmlbeans
包。可以在Java代码文件的开头添加以下导入语句:import org.apache.xmlbeans.XmlOptions;
XmlOptions
对象,并将http://xml.org/sax/properties/declaration-handler
属性设置为null
。这样可以禁用该属性,从而避免出现异常。下面是示例代码:// 创建XmlOptions对象
XmlOptions options = new XmlOptions();
// 将http://xml.org/sax/properties/declaration-handler属性设置为null
options.setProperty("http://xml.org/sax/properties/declaration-handler", null);
XmlOptions
对象传递给相关的方法。下面是示例代码:// 创建Excel工作簿对象
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
// 传递XmlOptions对象给解析方法
XSSFSheet sheet = workbook.getSheetAt(0, options);
通过上述步骤,我们成功禁用了http://xml.org/sax/properties/declaration-handler
属性,从而避免了SAXNotRecognizedException
异常的出现。
如果仍然遇到其他问题,可能是由于其他原因导致的。在这种情况下,建议查阅Apache POI官方文档、Stack Overflow或其他相关资源,以寻找更详细的解决方案或寻求帮助。
在 build.gradle 模块中包含这些依赖项:
implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '3.17'
implementation group: 'org.apache.xmlbeans', name: 'xmlbeans', version: '3.1.0'
implementation 'javax.xml.stream:stax-api:1.0'
implementation 'com.fasterxml:aalto-xml:1.2.2'
不要使用新版本poi的依赖项。