- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须使用 commons-digester.jar 来处理 android 中的 xml 文件实际上这是一个开源程序,它使用 commons-digester.jar 在 Java 中进行 xml 处理我需要更改它以支持 Android但是发生了这个错误:
Digester.getParser:java.lang.UnsupportedOperationException: 此解析器不支持规范“未知”版本“0.0”
java.lang.NullPointerException异常03-29 11:24:02.590:W/System.err(17018): 在 org.apache.commons.digester3.Digester.getXMLReader(Digester.java:790)03-29 11:24:02.590:W/System.err(17018):在 org.apache.commons.digester3.Digester.parse(Digester.java:1588)03-29 11:24:02.590:W/System.err(17018):在 org.apache.commons.digester3.Digester.parse(Digester.java:1557)03-29 11:24:02.590:W/System.err(17018):在 com.tashkeel.android.utilities.alkhalil.DbLoader.LoadPrefixes(DbLoader.java:65)03-29 11:24:02.590: W/System.err(17018): 在 com.tashkeel.android.utilities.alkhalil.analyse.Analyzer.(Analyzer.java:64)03-29 11:24:02.600:W/System.err(17018):在 com.tashkeel.android.MainActivity$1.run(MainActivity.java:80)03-29 11:24:02.600: W/System.err(17018): 在 java.lang.Thread.run(Thread.java:856)03-29 11:24:03.240: W/System.err(17018):
和使用 commons-digester 的代码示例
Digester digester = new Digester();
digester.addObjectCreate("prefixes", Lists.class);
digester.addObjectCreate("prefixes/prefixe", Prefixe.class);
digester.addSetProperties("prefixes/prefixe", "unvoweledform",
"unvoweledform");
digester.addSetProperties("prefixes/prefixe", "voweledform",
"voweledform");
digester.addSetProperties("prefixes/prefixe", "desc", "desc");
digester.addSetProperties("prefixes/prefixe", "classe", "classe");
digester.addSetNext("prefixes/prefixe", "addPrefixe");
return (Lists)digester.parse(pref);
我尝试解析的 xml 部分:
<?xml version="1.0" encoding="utf-8" ?>
<prefixes>
<prefixe unvoweledform="" voweledform="" desc="" classe="C1">
</prefixe>
<prefixe unvoweledform="و" voweledform="وَ" desc="حرف العطف" classe="C1">
</prefixe>
<prefixe unvoweledform="ف" voweledform="فَ" desc="حرف العطف أو الاستئناف"
classe="C1">
</prefixe>
</prefixes>
最佳答案
查看 Digester 的源代码,归结为以下代码:
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware( namespaceAware );
factory.setXIncludeAware( xincludeAware );
factory.setValidating( validating );
factory.setSchema( schema );
然后检查 JavaDoc 中的 SAXParserFactory#setSchema :
A parser must be able to work with any Schema implementation... Throws: UnsupportedOperationException - When implementation does not override this method.
所以我的猜测是您的代码接收的 SAXParserFactory
实现在某种程度上不支持模式。
SAXParserFactory.html#newInstance 中有一些故障排除提示。 doco,但您也可以通过以下内容找到返回的确切解析器类(不需要 Digester 代码):
SAXParserFactory factory = SAXParserFactory.newInstance();
System.err.println("SAXParserFactory class is " + factory.getClass().getName());
此外,来自 Android SAXParserFactory doco :
UnsupportedOperationException For backward compatibility, when implementations for earlier versions of JAXP is used, this exception will be thrown.
因此您可能需要检查您正在使用的 JAXP 等版本。
更新
鉴于您不需要模式,您可以尝试这个可能有效...而不是让消化器为您创建 SAXParserFactory
,您自己创建一个 - 这样您就可以避免调用setSchema
看起来可能是问题所在:
// create your own SAXParserFactory, but don't call any of the set methods unless you explicitly need to
final SAXParserFactory myfactory = SAXParserFactory.newInstance();
//myfactory.setNamespaceAware( namespaceAware );
//myfactory.setXIncludeAware( xincludeAware );
//myfactory.setValidating( validating );
//myfactory.setSchema( schema );
// create your own Digester and override the getFactory method to return your own factory
Digester digester = new Digester() {
@Override
public SAXParserFactory getFactory() {
return myfactory;
}
};
// use this digester as normal for the rest of your code...
目前没有进行任何 android 开发,所以无法测试,但看起来它可以工作...
更新 2
所以这看起来像是解决了模式问题,而您现在所遇到的似乎是一个单独的类加载器问题。这实际上是一个单独的问题,但这里有一个可能的黑客攻击......绕过 banutils 自省(introspection)并使用自定义规则自己处理属性。这只是真正实用的,因为您的示例中有相当简单的 XML - 任何更复杂的东西和这种方法都变得不可行:
final List<Prefixe> list = new ArrayList<>();
final SAXParserFactory factory = SAXParserFactory.newInstance();
Digester digester = new Digester() {
@Override
public SAXParserFactory getFactory() {
System.out.println("using custom factory...");
return factory;
}
};
digester.addRule("prefixes/prefixe", new Rule() {
@Override
public void begin(String namespace, String name, Attributes attributes) throws Exception {
Prefixe prefixe = new Prefixe();
prefixe.setUnvoweledform(attributes.getValue("unvoweledform"));
prefixe.setVoweledform(attributes.getValue("voweledform"));
prefixe.setDesc(attributes.getValue("desc"));
prefixe.setClasse(attributes.getValue("classe"));
list.add(prefixe);
}
});
digester.parse(...);
请注意,您似乎在某个地方遇到了类加载器问题(除非您使用的 beanutils 版本在某种程度上已被削弱?)我强烈建议您尝试深入了解这些问题,因为它们可能会回来一次又一次地咬你...
祝你好运!
关于带有 commons-digester java.lang.UnsupportedOperationException : This parser does not support specification "Unknown" version "0.0" 的 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29327630/
这是我的代码 14 20 {"Confirm Email"} 21 在第 17 行我得到错误 Type '{ pathname: string; user: { em
这是我的代码 14 20 {"Confirm Email"} 21 在第 17 行我得到错误 Type '{ pathname: string; user: { em
这个问题已经有答案了: How do I compare strings in Java? (23 个回答) 已关闭 8 年前。 为什么 KeyEvent.getKeyText(0).substrin
我正在尝试 Rust 的新 wasm32-unknown-unknown 目标,我在调用数学函数(例如 sin、cos、exp、atan2)时遇到问题。 cargo .toml: [package]
当我为 spring-boot 创建启动项目时,我在 pom 文件中收到此错误。这只是为了创建一个基本的 Spring Boot 项目 Project build error: Invalid pac
我已经订阅了我想要传输的数据。但不知何故它不起作用。我收到此错误: The property pipe is not available for type "OperatorFunction" 这是我
运行以下查询时。select * from surgerys where to_char(dt_surgery ,'DD-MM-YYYY' ) = to_char('12-02-2012','DD-M
我在运行存储过程时遇到以下异常: com.microsoft.sqlserver.jdbc.SQLServerException:不支持从 UNKNOWN 到 UNKNOWN 的转换。 过程定义如下:
我尝试运行以下代码。顺便说一句,我对 python 和 sklearn 都是新手。 import pandas as pd import numpy as np from sklearn.linear
我已经阅读了关于未知类型的官方文档,但我很难真正理解它是如何工作的。 人们可以在文档中读到:“在没有首先断言或缩小到更具体的类型之前,不允许对未知进行任何操作。” 但如果我有这个功能: const f
我正在尝试在Mac OS中设置Hadoop 2.6.0 我正在关注这篇文章: http://hadoop.apache.org/docs/r2.4.0/hadoop-project-dist/hado
配置 Nexus docker 注册表和代理“dockerhub-proxy”后,如下所述: https://help.sonatype.com/repomanager3/formats/docker
我收到此错误 - “ValueError:未知标签类型:'unknown'” 我已经在网上搜索但无法摆脱这个错误,顺便说一句,我是 python 的新手:) 我的数据有 5 行 22 列,最后一列是标
使用 SHA256 摘要标识符 拉取图像失败 最佳答案 不幸的是,这是 DockerHub 删除 Docker 1.9 守护进程的向后兼容性的副作用。当使用 Docker 1.10 推送图像时,较旧的
我是 postgresql 的新手,正在尝试使用全文搜索 to_tsvector但是我遇到了错误。 SQL 和错误 SELECT to_tsvector('english', 'The quick b
每当我这样做时 npm run watch ,第一次编译工作正常 - 但经过几次编译后,我最终会得到这个错误: 95% emitting unnamed compat pluginError: UNK
在一个新的 Angular 应用程序中,我收到以下错误:Error from chokidar : Error: UNKNOWN: unknown error, watch我已经删除并重新安装 nod
使用 Typescipt 4.x.x 我写了一些代码来实现其他语言 Elm/Rust/Haskell 中常用的 Maybe/Option 类型。 我想写一个可以接受映射类型的通用函数 type MyM
const submitted = useSelector((state) => state.post.submitted) 对于上面的状态。我得到错误: (参数)状态:未知对象的类型为“未知”。 这
我正在尝试将多架构 docker 镜像推送到 docker hub 并遇到错误(在 https://github.com/docker/distribution/issues/3100 处打开了 do
我是一名优秀的程序员,十分优秀!