【问题标题】:Parsing XML file stored in internal storage using DOM parser in android.使用 android 中的 DOM 解析器解析存储在内部存储中的 XML 文件。
【发布时间】:2012-01-10 10:15:21
【问题描述】:

我在设备的内部存储中创建了一个 xml 文件,如 android 开发者网站上所述。我现在想使用 DOM 解析器解析文件。我需要做什么才能让 DOM 解析器读取我的 XML 文件? 这是一个sn-p:

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document dom = db.parse(new InputSource(new StringReader(data)));
    dom.getDocumentElement().normalize(); 

我需要在“数据”的位置放置什么:

    Document dom = db.parse(new InputSource(new StringReader(data)));

我知道这很愚蠢,但我们将不胜感激。

【问题讨论】:

    标签: android xml dom xml-parsing domparser


    【解决方案1】:

    您可以像下面那样制作 xml 字符串的输入流,然后获取可以解析的节点以获取值。

    InputStream is = new ByteArrayInputStream(theXMLString.getBytes("UTF-8"));
    
            // Build XML document
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(is);
    

    请记住,您将 xml 文件作为字符串传递。

    【讨论】:

    • “记住你将 xml 文件作为字符串传递。” ...你是怎么做到的?如何从 File 对象转到 InputStream
    【解决方案2】:

    你可以在inputsource中给FileInputStream

    文档 dom = db.parse(new InputSource(new FileInputStream(data)));

    【讨论】:

    • 并用文件名代替数据?
    • 不,您需要从文件中获取输入流,如下所示:File sdcard = Environment.getExternalStorageDirectory(); //获取文本文件 File file = new File(sdcard,"file.txt"); //从文件中读取文本 StringBuilder text = new StringBuilder(); BufferedReader br = new BufferedReader(new FileReader(file));
    • 它不工作。我在内部存储中创建了文件,并在字符串变量“data”中读回了它。当我显示数据的内容时,它会给我文件输出。但是当我在 db.parse(...) 中传递“数据”时,我没有收到错误,但不知何故我也没有得到任何解析结果。更多代码:dom.getDocumentElement().normalize();元素根 = (元素) dom.getDocumentElement(); NodeList items = ((Document)root).getElementsByTagName("network"); Toast.makeText(getApplicationContext(), "节点长度: "+ items.getLength(), Toast.LENGTH_LONG).show();
    • 我不知道你为什么要通过输出流读取文件,我们可以通过输入流读取资源,而InputSource需要输入流,参数中的读取器,请仔细检查,如果您的文件编写代码得到执行成功,可能有问题。
    【解决方案3】:

    要读取 XML 文件,请尝试以下操作

    FileInputStream in = new FileInputStream("/sdcard/text.txt");
    StringBuffer data = new StringBuffer();
    InputStreamReader isr = new InputStreamReader(in);
    
    BufferedReader inRd = new BufferedReader(isr);
    
    String text;
    while ((text = inRd.readLine()) != null) {
        inLine.append(text);
        inLine.append("\n");
    }
    in.close();
    
    String finalData =data.toString();  // Here is your data.
    

    希望以上内容对你有用。

    【讨论】:

    • 我正在恢复原样的文件内容。但我的问题是如何让 DOM 解析器读取文件或 inputStream 数据??
    • 现在可以使用 Document dom = db.parse(finalData);
    【解决方案4】:

    尝试使用 DOM Parser 从 Asset 文件夹中解析此代码:

        DocumentBuilderFactory DBF;
        DocumentBuilder DB;
        Document dom;
        Element elt;
    
        DBF = DocumentBuilderFactory.newInstance();
        DB = DBF.newDocumentBuilder();
        dom = DB.parse(new InputSource(getAssets().open("city.xml")));
        elt = dom.getDocumentElement(); 
        NodeList items = elt.getElementsByTagName("item");
    

    其中item为Node元素,根据需求添加try ctch块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-11
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      相关资源
      最近更新 更多