2017-01-06 52 views
0

我試圖在Android上使用的javax.xml.parsers,但我總是得到的ParserConfigurationException試圖設置這兩個功能時:的ParserConfigurationException與Android的javax.xml.parsers

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

是否也能提供堆棧跟蹤,這將是有益的 – ZeusNet

回答

0

該文檔上developer.android.com

功能名稱是完全合格的URI。實現可以定義它們自己的特徵。如果此DocumentBuilderFactory或其創建的DocumentBuilder不能支持該功能,則會引發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);

1

功能名稱是完全限定的URI。實現可以定義它們自己的特徵。如果此DocumentBuilderFactory或其創建的DocumentBuilder不支持該功能,則會引發ParserConfigurationException。 DocumentBuilderFactory可能公開特徵值,但無法更改其狀態。

+0

是的,我讀了HTTPS文檔:/ /developer.android.com/reference/javax/xml/parsers/DocumentBuilderFactory.html。所以這意味着Android SDK現在不支持這些功能,現在我猜... – Laurent