Android:从本地资源中读取XML(用于测试)

时间:2011-02-24 23:13:07

标签: android xml parsing file

我正在编写一个应用程序,它将从Web服务中读取XML(可能通过kSOAP2)。我对SAX解析非常满意,因为我已经完成了XML解析iPhone应用程序。

不幸的是,webservice尚未公开,所以对于初始测试,我有一些包含我需要解析的XML的文件。在这个早期的开发阶段,我只需要从文件中读取XML并将其传递给XML解析器

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

如何将文件/资源​​中的XML读入字符串以传递给此方法。我想破解并测试解析器,但这个简单的步骤阻碍了我。

由于

3 个答案:

答案 0 :(得分:12)

在res

下创建原始文件夹

将您的XML文件放在那里,例如。 testXML.xml:

/res/raw/testXML.xml

您应该能够将XML解析器用作输入流:

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

试试。

答案 1 :(得分:2)

我找到了解决方案。使用资产。 这是我如何做到的简单代码示例。 我知道我可以使用XmlPullParser简单地从res加载一个xml文件,但我想使用SAX解析。这允许我在插入Web服务之前简单地将XML字符串抛出到SAX解析器中进行测试。

它只是使用一个带有Button的简单视图来启动文件加载,而使用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();
}
}

答案 2 :(得分:0)

  

由于格式错误的XML(line1,Pos0)引发异常。

您告诉解析器编码是UTF-8,如果不是,您可能会遇到各种错误(取决于解析器)。如果您使用非xml编辑器编辑XML,则可以将文件保存为不同的编码,无论您在XML文档中声明它是什么。