Android:从本地资源读取XML(用于测试)
我正在编写一个应用程序,它将从Web服务读取XML(可能通过kSOAP2)。我对SAX解析相当满意,就像我对iPhone应用程序进行XML解析一样 不幸的是,webservice还不是公共的,所以对于初始测试,我有一些包含需要解析的XML的文件。在这个早期开发阶段,我只需要从文件中读取XML并将其传递给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读入字符串以传递到此方法中。我想破解并测试解析器,但
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();
}
}