You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中使用JDOM2解析XML报错:SAXBuilder无法读取XML文件

问题:JDOM2 SAXBuilder读取XML文件报错

使用JDOM2库编写Android代码读取raw目录下的XML文件时,SAXBuilder无法解析文件,报错信息如下:

org.jdom2.JDOMException: http://xml.org/sax/features/external-general-entities 特性不被SAX驱动org.apache.harmony.xml.ExpatReader支持

相关代码

Java代码

package com.example.books_xmltojson;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import org.jdom2.Document;
import org.jdom2.input.SAXBuilder;
import java.io.InputStream;

public class MainActivity extends AppCompatActivity {
    EditText edittext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edittext = findViewById(R.id.edittext);
        // SAX builder 
        InputStream input = getResources().openRawResource(R.raw.books);
        SAXBuilder builder = new SAXBuilder();
        try {
            Document doc = builder.build(input);
        } catch (Exception e) {
                edittext.setText(e.toString());
      } 
   }
}

XML文件(R.raw.books)

// Resources
<catalog>
   <book>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>

   </book>
   <book>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
   </book>
</catalog>

解决方法

报错原因是JDOM2默认尝试启用的外部实体相关SAX特性,在Android自带的ExpatReader中不被支持。只需在初始化SAXBuilder时手动禁用这些特性即可:

修改SAXBuilder的初始化代码如下:

SAXBuilder builder = new SAXBuilder();
// 禁用外部通用实体和参数实体,适配Android的ExpatReader
builder.setFeature("http://xml.org/sax/features/external-general-entities", false);
builder.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

或者使用JDOM2提供的非验证读取器,默认会禁用这些特性:

import org.jdom2.input.sax.XMLReaders;

// ...

SAXBuilder builder = new SAXBuilder(XMLReaders.NONVALIDATING);

修改后重新运行代码,即可正常解析XML文件。

内容的提问来源于stack exchange,提问作者Arash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 13:29:59