Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:从本地资源读取XML(用于测试)_Android_Xml_Parsing_File - Fatal编程技术网

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

Android:从本地资源读取XML(用于测试),android,xml,parsing,file,Android,Xml,Parsing,File,我正在编写一个应用程序,它将从Web服务读取XML(可能通过kSOAP2)。我对SAX解析相当满意,就像我对iPhone应用程序进行XML解析一样 不幸的是,webservice还不是公共的,所以对于初始测试,我有一些包含需要解析的XML的文件。在这个早期开发阶段,我只需要从文件中读取XML并将其传递给XML解析器 Xml.parse(this.testXML, root.getContentHandler()); 如何将文件/资源中的XML读入字符串以传递到此方法中。我想破解并测试解析器,但

我正在编写一个应用程序,它将从Web服务读取XML(可能通过kSOAP2)。我对SAX解析相当满意,就像我对iPhone应用程序进行XML解析一样

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

Xml.parse(this.testXML, root.getContentHandler());
如何将文件/资源中的XML读入字符串以传递到此方法中。我想破解并测试解析器,但这个简单的步骤阻碍了我

谢谢

在res下创建一个原始文件夹

将XML文件放入其中,例如testXML.XML:

/res/raw/testXML.xml

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

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

试试看。

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

它只使用一个简单的视图和一个按钮来启动文件加载,现在使用一个文本视图来显示XML。我可以继续使用我的解析器:)

由于格式不正确的XML(第1行,Pos0)引发异常


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

哦,忘了提一下。XML文件需要放在项目的/assets文件夹中。希望有一天其他人会觉得这很有用。Martin,你有没有像我说的那样尝试将XML转换成原始格式?我做了一个测试项目,发现如果把XML放在一个名为“raw”而不是“XML”的文件夹中,它就可以工作。我不太清楚为什么会有不同,但确实如此。我喜欢高效的解决方案,有一行肯定非常高效:)我相信“原始”xml文件作为文件存储在资产中,而“xml”xml文件作为预解析的xml(通过XmlResourceParser)存储。
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();
}
}