如何解决从字符串而不是文件解析XML时出现问题
| 我有一个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可以正常工作。
但是不是字符串形式的
为什么?
谢谢你的任何想法
杰森
解决方法
您似乎没有在采用字符串的代码路径中设置内容处理程序。
为什么不将String封装在StringReader中并解析呢?
InputSource is = new InputSource(new StringReader(string));
xr.parse(is);
您的示例(已修改):
private void getParsedXML(String s) throws Exception{
if(this.levelData == null){
/* Get a SAXParser from the SAXPArserFactory. */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLHandlerLevel myExampleHandler = new XMLHandlerLevel();
XMLReader xr = sp.getXMLReader();
/* Begin parsing */
InputSource is = new InputSource(new StringReader(string));
xr.parse(is);
this.levelData = myExampleHandler.getLevelData();
Log.e(\"jason\",(levelData!=null)?levelData.toString():null);
in.close();
}
}
,我不确定它是否对您有帮助,但是有一个名为Jsoup.jar的外部jar文件将其添加到您的项目中,它具有解析xml,html的API ...请参阅Internet上的教程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。