XML简单解析

时间:2016-10-18 07:26:03

标签: android xml parsing dom sax

我有一个关于解析的问题(Android Studio)。它不是特别关注某些事情。我的代码没有运行。没有错误。我希望能够按下一个按钮并显示一个特定的文本,从XML文件解析。

现在,我将省略按钮部分并向您提供仅用于在简陋的文本视图上打印此文本的代码

XML CODE(app / src / main / assets follder。articles.xml)

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE articles[
<!ELEMENT articles ANY>
<!ELEMENT article ANY>
<!ATTLIST article ID ID #IMPLIED> ]>
<articles>
 <article ID="a1">TEST
</article>
 <article ID="a2">1.TEST2
</article>

CLASS CODE

package com.blah.blah;

import android.content.res.AssetManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import java.io.IOException;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

public class MainActivity extends AppCompatActivity {

TextView textView;
String stringArticle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    AssetManager assetManager = this.getAssets();
    InputStream inputStream = null;

     try {

         // Loads your XML file as an InputStream
         inputStream = assetManager.open("articles");

         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
         DocumentBuilder builder = factory.newDocumentBuilder();
         Document doc = builder.parse(inputStream);

         Element article = doc.getElementById("a1");
         String stringArticle = article.getTextContent();

        TextView textView = (TextView) findViewById(R.id.textView);
        textView.setText(stringArticle);

     } catch (IOException e) {
         // Exception Handling Code
         e.printStackTrace();
     }catch (ParserConfigurationException e) {
         e.printStackTrace();
     } catch (SAXException e) {
         e.printStackTrace();
     }
}
}        

我没有尝试过返回NodeList的技术,因为我不想迭代任何东西。我发现它对我的项目没用。我想要的是非常原始的东西。这就像那些简单的圣经应用程序。按下带有经文的按钮,弹出相应的文字。那么简单。

再一次,没有任何错误!只是不工作。我认为TRY部分没有执行。因为它为我提供了TextView上的默认“hello world”文本。但是,一旦我把

TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(stringarticle);
在TRY / CATCH块之后的

行,我只得到一个空的TextView。

TY!

1 个答案:

答案 0 :(得分:0)

您可以将XML文件放在&#34; app / src / main / assets&#34;目录。之后,您可以通过&#34; AssetManager&#34;轻松访问您的XML文件。类。

您可以使用以下代码作为参考: -

 AssetManager assetManager = this.getAssets();
    InputStream inputStream = null;
    try {
        // Loads your XML file as an InputStream
        inputStream = assetManager.open("articles.xml");

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(inputStream);
        Element article = doc.getElementById("1");
        String stringarticle = article.getTextContent();

        TextView textView = (TextView) findViewById(R.id.textView);
        textView.setText(stringarticle);

    } catch (IOException e) {
        // Exception Handling Code
        e.printStackTrace();
    }catch (ParserConfigurationException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    }

请记住将文件放在提到的目录中,否则&#34; AssetManager&#34;班级赢了,无法阅读。

干杯!!