2017-01-06 17 views
0

Я пытаюсь использовать javax.xml.parsers на Android, но я всегда получаю ParserConfigurationException при попытке установить эти две функции:ParserConfigurationException с javax.xml.parsers на Android

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(); 
    } 
+0

Не могли бы вы также обеспечить StackTrace, это было бы полезно – ZeusNet

ответ

0

Документов на developer.android.com говорит

имена Характеристика полностью квалифицированные идентификаторы URI. Реализации могут определять свои собственные функции. Исключение ParserConfigurationException возникает, если этот DocumentBuilderFactory или создаваемые DocumentBuilders не могут поддерживать эту функцию. Возможно, DocumentBuilderFactory может выставить значение функции, но не сможет изменить его состояние.

Но выглядит эта функция существует в xerces.apache.org

Так что я предполагаю, что это означает, что эти функции (используемые для проверки документов) не поддерживается в Android SDK сейчас.

Просто для информации. Я нашел эту ошибку, используя библиотеку парсеров Epub, доступную в Android Arsenal EpubParser. Я не единственный, кто нашел эту проблему. Похоже, есть проблема с этой библиотекой, потому что эти две неподдерживаемые функции используются относительно кода:

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

1

Названия функций - это полностью квалифицированные URI. Реализации могут определять свои собственные функции. Исключение ParserConfigurationException возникает, если этот DocumentBuilderFactory или создаваемые DocumentBuilders не могут поддерживать эту функцию. Возможно, DocumentBuilderFactory может выставить значение функции, но не сможет изменить его состояние.

+0

Да, я читал документы по протоколу HTTPS://developer.android.com/reference/javax/xml/parsers/DocumentBuilderFactory.html тоже. Таким образом, это означает, что эти функции не поддерживаются в Android SDK, теперь я думаю ... – Laurent