【发布时间】:2011-04-14 11:26:41
【问题描述】:
我有一个 xml 解析器,当我从文件加载它时,它可以完美运行:
private void getParsedXML(int id, Context context) throws Exception {
/* Get a SAXParser from the SAXPArserFactory. */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
/* Get the XMLReader of the SAXParser we created. */
XMLReader xr = sp.getXMLReader();
/* Create a new ContentHandler and apply it to the XML-Reader */
XMLHandlerLevel myExampleHandler = new XMLHandlerLevel();
xr.setContentHandler(myExampleHandler);
/* Load xml file from raw folder*/
InputStream in = context.getResources().openRawResource(id);
/* Begin parsing */
xr.parse(new InputSource(in));
this.levelData = myExampleHandler.getLevelData();
in.close();
}
但现在我也从服务器获取一些内容。然后 XML 作为字符串发送,这就是它阻塞的地方:
private void getParsedXML(String s) throws Exception{
if(this.levelData == null){
InputStream in = StringToStream(s);
/* Get a SAXParser from the SAXPArserFactory. */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLHandlerLevel myExampleHandler = new XMLHandlerLevel();
XMLReader xr = sp.getXMLReader();
/* Begin parsing */
xr.parse(new InputSource(in));
this.levelData = myExampleHandler.getLevelData();
Log.e("jason",(levelData!=null)?levelData.toString():null);
in.close();
}
}
这里是 StringToString 函数
public static InputStream StringToStream(String text) {
InputStream is = null;
/*
* Convert String to InputStream using ByteArrayInputStream
* class. This class constructor takes the string byte array
* which can be done by calling the getBytes() method.
*/
try {
is = new ByteArrayInputStream(text.getBytes("UTF-8"));
is.reset();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (Exception e){
Log.e("jason","failed again");
}
return is;
}
但这不起作用...
我确定字符串的内容。 我测试了 StringToStream 函数,它工作正常。
我还将日志放入 XMLHandlerLevel 以检查发生了什么,甚至没有调用函数 startDocument(),但我没有收到任何错误消息,也没有异常,所以我完全无法解释这一点。
继续: 当 Stream 来自 context.getResources().openRawResource(id); 时,我的 XMLParser 工作正常; 但不是当它形成一个字符串时 为什么?
感谢您的任何想法
杰森
【问题讨论】:
-
你的意思是它不起作用?是否抛出异常?
-
您没有将文本制作成 InputStream,StringReader 会更好。但是传递的代码本质上是一样的——一定还有别的问题吗?在这种情况下,让 parse 方法以这样的方式接收 xml 源代码,使工作代码和非工作代码共享一些逻辑,这样您就可以消除共享代码的问题..
-
@kgiannakakis 没有抛出异常,这是最让我烦恼的。 @Thomas 这已经是我所做的,唯一的区别是在 InputSource 上创建
-
您似乎没有在接受字符串的代码路径中设置 ContentHandler(请参阅我更新的答案)。
-
@Blaise Doughan:谢谢!我无法相信我对这个有多盲目:S
标签: java android xml inputstream