Android: чтение XML с локального ресурса (для тестирования) - PullRequest
8 голосов
/ 25 февраля 2011

Я пишу приложение, которое будет читать XML из веб-сервиса (возможно, через kSOAP2). Я довольно доволен синтаксическим анализом SAX, так как я делал XML-приложения для iPhone.

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

Xml.parse(this.testXML, root.getContentHandler());

Как мне прочитать XML из файла / ресурса в строку для передачи в этот метод. Я хочу взломать и протестировать парсер, но этот простой шаг удерживает меня.

Спасибо

Ответы [ 3 ]

12 голосов
/ 25 февраля 2011

Создайте папку raw в res

Поместите туда свой XML-файл, например. testXML.xml:

/ Рез / сырье / testXML.xml

Вы должны иметь возможность использовать XML-парсер, используя его в качестве входного потока:

Xml.parse(getResources().openRawResource(R.raw.testXML), Xml.Encoding.UTF_8, root.getContentHandler());

Попробуйте это.

2 голосов
/ 25 февраля 2011

Я нашел решение. Использование активов. Вот простой пример кода того, как я это сделал. Я знаю, что мог бы использовать XmlPullParser для простой загрузки XML-файла из res, но я хотел использовать SAX-разбор. Это позволяет мне просто добавить строку XML в анализатор SAX для тестирования перед подключением веб-службы.

Он просто использует простое представление с кнопкой для запуска загрузки файла и TextView для отображения XML на данный момент. Я могу продолжить с моим парсером:)

package com.martins.XmlParserTest
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();
}
}
0 голосов
/ 05 февраля 2013

Вызывает исключение из-за неправильно сформированного XML (line1, Pos0).

Вы сообщаете парсеру, что кодировка UTF-8, а если нет, вы можете получить различные ошибкив зависимости от парсеров).Если вы используете не XML-редактор для редактирования своего XML-файла, он может сохранить файл в другой кодировке независимо от того, что вы объявили в XML-документе.

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