Как читать XML-файл в Android - PullRequest
10 голосов
/ 27 февраля 2012

Я хочу прочитать XML-файл, который выглядит следующим образом ... Я сохранил его в папке активов с

<ImageList SpriteSheetName="hh_gmw01">
   <Image Name="gmw01"     x="0" y="0" width="1047" height="752"/>
   <Image Name="hht1l01"   x="388" y="269" width="34" height="36"/>
   <Image Name="hht1l02"   x="147" y="99" width="85" height="33"/>
</ImageList>

Как мне получить эти значения?

Ответы [ 6 ]

7 голосов
/ 27 февраля 2012

Попробуйте сначала:

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

import android.app.Activity;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class Main extends Activity {

Button btn;
TextView tvXml;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button btn = (Button) findViewById(R.id.button1);

    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // Load XML for parsing.
            AssetManager assetManager = getAssets();
            InputStream inputStream = null;
            try {
                inputStream = assetManager.open("textxml.xml");
            } catch (IOException e) {
                Log.e("tag", e.getMessage());
            }

            String s = readTextFile(inputStream);
            TextView tv = (TextView)findViewById(R.id.textView1);
            tv.setText(s);
        }
    });
}


private String readTextFile(InputStream inputStream) {
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

    byte buf[] = new byte[1024];
    int len;
    try {
        while ((len = inputStream.read(buf)) != -1) {
            outputStream.write(buf, 0, len);
        }
        outputStream.close();
        inputStream.close();
    } catch (IOException e) {

    }
    return outputStream.toString();
}
}
3 голосов
/ 27 февраля 2012

Существует несколько способов чтения XML в Android.Мой первый вариант - DocumentBuilder , поскольку не создает ограничение версии API (доступно с уровня API 1).

Пример из одного из моих проектов:

public Document parseXML(InputSource source) {
    try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        dbf.setNamespaceAware(false);
        dbf.setValidating(false);
        DocumentBuilder db = dbf.newDocumentBuilder();
        return db.parse(source);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
 }

Как вы читаете файл и получаете доступ к значениям документа после этого, ну, это довольно просто, просто Google его.

2 голосов
/ 27 февраля 2012

Для начала используйте DOM parser. Так как его код намного меньше, и его легко следовать. SAX-парсер - это слишком много кода для начала. Люди будут утверждать, что SAX быстрее, да, но DOM проще, меньше кода и меньше ошибок.

Если вам необходимо перейти к SAX, сначала измерьте время отклика при использовании DOM, и только если синтаксический анализ причиняет вам наибольшую боль, затем перейдите к SAX. Или же DOM делает замечательную работу.

1 голос
/ 27 февраля 2012

Лично я бы не рекомендовал парсер DOM, попробуйте вместо этого, простые аннотации могут помочь вам с помощью парсера Simple xml

http://www.javacodegeeks.com/2011/02/android-xml-binding-simple-tutorial.html

0 голосов
/ 03 января 2019
/*
* <ImageList SpriteSheetName="hh_gmw01">
*       <Image Name="gmw01"     x="0" y="0" width="1047" height="752"/>
*       <Image Name="hht1l01"   x="388" y="269" width="34" height="36"/>
*       <Image Name="hht1l02"   x="147" y="99" width="85" height="33"/>
* </ImageList>
*/

private void testXML() throws XmlPullParserException {
    AssetManager assetManager = getAssets();
    try {
        InputStream xmlStream = assetManager.open("xmlfile.xml");
        try {
            XmlPullParser xmlParser = Xml.newPullParser();
            xmlParser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            xmlParser.setInput(xmlStream, null);
            xmlParser.nextTag();

            int imgNum = 0;
            xmlParser.require(XmlPullParser.START_TAG, null, "ImageList"/*root node*/);
            Log.d("ImageList", "SpriteSheetName = " + xmlParser.getAttributeValue(null, "SpriteSheetName"));
            while (xmlParser.next() != XmlPullParser.END_TAG) {
                if (xmlParser.getEventType() != XmlPullParser.START_TAG) {
                    continue;
                }

                xmlParser.require(XmlPullParser.START_TAG, null, "Image");
                //. fetch nodes attributes here...
                Log.d("xmlNode", "img " + (++imgNum) +
                           " Name = " + xmlParser.getAttributeValue(null, "Name") +
                        " x = "       + xmlParser.getAttributeValue(null, "x") +
                        " y = "       + xmlParser.getAttributeValue(null, "y") +
                        " width = "   + xmlParser.getAttributeValue(null, "width") +
                        " height = "  + xmlParser.getAttributeValue(null, "height")
                );
                //................................
                xmlParser.nextTag();
                xmlParser.require(XmlPullParser.END_TAG, null, "Image");
            }


        } finally {
            xmlStream.close();
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
    assetManager.close();
}
0 голосов
/ 10 января 2014

Попробуйте это для Xamarin.Android (кросс-платформенный)

Вам необходимо сохранить XML-файл в папке «Ресурсы» с помощью действия сборки «AndroidAsset».

using System;
using System.Xml;
using System.IO;

Фрагмент кода для чтения XML-файла

XmlDocument xDoc = new XmlDocument();
Stream xmlStream = Assets.Open("textxml.xml");
xDoc.Load(xmlStream);

Класс XmlDocument реализует базовый анализатор объектной модели документов (DOM) XML для .NET Framework.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...