0

我正在尝试在 Android 上使用 javax.xml.parsers 但在尝试设置这两个功能时总是得到 ParserConfigurationException :

factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);

这是我的代码

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(false);
    factory.setValidating(false);
    try {
            factory.setFeature("http://xml.org/sax/features/namespaces", false);
            factory.setFeature("http://xml.org/sax/features/validation", false);
            factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
            factory.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);

    } catch (ParserConfigurationException e) {
            e.printStackTrace();
    }
4

2 回答 2

1

功能名称是完全限定的 URI。实现可以定义它们自己的特性。如果此 DocumentBuilderFactory 或其创建的 DocumentBuilders 不支持该功能,则会引发 ParserConfigurationException。DocumentBuilderFactory 可以公开一个特征值但不能改变它的状态。

于 2017-01-06T07:39:11.617 回答
0

developer.android.com上的文档说

功能名称是完全限定的 URI。实现可以定义它们自己的特性。如果此 DocumentBuilderFactory 或其创建的 DocumentBuilders 不支持该功能,则会引发 ParserConfigurationException。DocumentBuilderFactory 可以公开一个特征值但不能改变它的状态。

但看起来这个功能存在于xerces.apache.org

所以我想这意味着 Android SDK 目前不支持这些功能(用于文档验证)。

仅供参考。我使用 Android Arsenal EpubParser中提供的 Epub 解析器库发现了这些错误。我不是唯一一个发现这个问题的人。看起来这个库有问题,因为这两个不受支持的功能用于代码:

factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); factory.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);

于 2017-01-06T08:09:49.797 回答