我正在编写一个应用程序,它将从Web服务中读取XML(可能通过kSOAP2)。我对SAX解析非常满意,因为我已经完成了XML解析iPhone应用程序。
不幸的是,webservice尚未公开,所以对于初始测试,我有一些包含我需要解析的XML的文件。在这个早期的开发阶段,我只需要从文件中读取XML并将其传递给XML解析器
Xml.parse(this.testXML, root.getContentHandler());
如何将文件/资源中的XML读入字符串以传递给此方法。我想破解并测试解析器,但这个简单的步骤阻碍了我。
由于
答案 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文档中声明它是什么。