我有以下Java代码,它应该在Android的res/xml
文件夹中获取XML并解析它。
然而,InputStream
可能带有不正确的编码,因为无论我做什么都没关系,我不会得到正确的文本。行org.xmlpull.v1.XmlPullParserException: Unexpected token
(more details here)中会抛出parser.nextTag();
个异常。我已经尝试删除BOM(字节顺序标记)和更改编码。我的XML文件中绝对没有无效字符。在Java项目中运行此文件而不是Android项目,效果非常好。
我检查了其他问题,但其中大多数似乎都做了同样的事情。
我的问题:发生什么事使我无法正确阅读XML文件?
//...
InputStream is = getInstrumentation().getContext().getResources().openRawResource(com.example.test.R.xml.teste);
//...
public List<Field> parseDocument(InputStream in) {
try {
XmlPullParser parser = Xml.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(in, "utf-8");
parser.nextTag(); // "org.xmlpull.v1.XmlPullParserException: Unexpected token" is thrown here.
return readFeed(parser);
} catch (Exception e) {
e.printStackTrace();
}
return fields;
}
这是一个不起作用的XML示例:http://pastebin.com/i9vRpDW5。在阅读文件时,我确保删除了BOM。
编辑:只是为了了解如何读取XML。我写了以下方法。无论我使用什么编码,我都会收到一个疯狂的文本。
public String readFile(InputStream is) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = "";
StringBuilder result = new StringBuilder();
while ((line = reader.readLine()) != null) {
result.append(line);
}
return result.toString();
}