老铁们,大家好,相信还有很多朋友对于Android XML文件解析技巧:SAX方法详解和的相关问题不太懂,没关系,今天就由我来为大家分享分享Android XML文件解析技巧:SAX方法详解以及的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
私有类MyHandler 扩展DefaultHandler{
私有字符串节点名=null;
私有StringBuilder id=null,name=null,grade=null;
@覆盖
公共无效startDocument()抛出SAXException {
super.startDocument();
id=new StringBuilder();
名称=新的StringBuilder();
等级=新的StringBuilder();
}
@覆盖
公共无效endDocument()抛出SAXException {
super.endDocument();
}
@覆盖
public void startElement(String uri, String localName, String qName, Attributes 属性) 抛出SAXException {
super.startElement(uri, localName, qName, 属性);
节点名称=本地名称;
}
@覆盖
公共无效endElement(字符串uri,字符串localName,字符串qName)抛出SAXException {
super.endElement(uri, localName, qName);
if (localName.equals("学生")){
String a=id.toString().trim();
String b=name.toString().trim();
String c=grade.toString().trim();
Log.d("结果",a+" -- "+b+" -- "+c);
id.setLength(0);
名称.setLength(0);
等级.setLength(0);
}
}
@覆盖
公共无效字符(char [] ch,int start,int length)抛出SAXException {
super.characters(ch, 开始, 长度);
if(nodeName.equals("id")){
id.append(ch,开始,长度);
}否则if(nodeName.equals("name")){
名称.append(ch,开始,长度);
}否则if(nodeName.equals("grade")){
等级.append(ch,开始,长度);
}
}MyHolder中的五个方法都继承自DefaultHandler。你可以通过方法名称猜出它们的功能。 startDocument 方法在文档开始时调用,endDocument 方法在文档结束时调用,startElement 方法在标签开始时调用。结束标签时,调用endElement方法,获取里面的内容并调用characters方法。
定义成员变量nodeName存储当前节点名称,id、name、grade分别存储学生的id、name、grade。
启动标签时,为nodeName 赋值。执行characters方法时,根据nodeName中的值决定要执行的操作。当一个标签结束时,打印出id、name、grade中的值,同时清除id、name、grade。这样,MyHandler就完成了。
接下来我们要实现调用代码:
@覆盖
protected void onCreate(Bundle savingInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sax);
Log.d("成绩","id -- 姓名-- 成绩");
新线程(新可运行(){
@覆盖
公共无效运行(){
f1();
}
})。开始();
}
私有无效f1() {
尝试{OkHttpClient client=new OkHttpClient();
请求request=new Request.Builder().url("http://*.*.*.*:*/testPull.xml").build();
响应response=client.newCall(request).execute();
String s=response.body().string();
f2(s);
} catch (IOException e) {
e.printStackTrace();
}
}
私人无效f2(字符串s){
尝试{
SAXParserFactory因子=SAXParserFactory.newInstance();
XMLReader reader=factor.newSAXParser().getXMLReader();
MyHandler 处理程序=new MyHandler();
reader.setContentHandler(处理程序);
reader.parse(new InputSource(new StringReader(s)));
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}f1()方法与pull分析的内容兼容,不再赘述。
【Android XML文件解析技巧:SAX方法详解】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
我想了解一下SAX解析有哪些优势,和DOM解析相比怎么样?
有17位网友表示赞同!
我刚开始学Android开发,想问问SAX解析怎么用,有详细教程吗?
有16位网友表示赞同!
学习XML解析挺有意思的,SAX解析看起来更轻量级,适合处理大文件吧?
有12位网友表示赞同!
我最近项目中用到SAX解析,感觉代码比较简洁,效率也还不错。
有9位网友表示赞同!
这篇文章看来讲解得很透彻!能给我一些实例代码吗?方便学习一下。
有10位网友表示赞同!
请问,用SAX解析的时候,需要提前知道XML文件的大小吗?
有9位网友表示赞同!
我有点不太明白event handler的作用,它具体是怎么接收数据的?
有10位网友表示赞同!
SAX分析速度快这一点很吸引我,适合我的项目需求,我会来试试!
有20位网友表示赞同!
Android开发中除了SAX解析 XML 文件,还有什么其他的方法吗?
有16位网友表示赞同!
学习一下SAX解析,能够让我更全面地掌握Android开发的XML处理知识吧?
有6位网友表示赞同!
请问SAX解析适合处理复杂嵌套的XML文件吗?
有14位网友表示赞同!
这篇文章讲得太详细了,我终于明白了SAX解析的基本原理。
有19位网友表示赞同!
我想知道SAX解析和DOM解析哪个更加灵活,更容易使用呢?
有13位网友表示赞同!
学习编程的关键是掌握各种工具和方法,现在就来学习一下SAX解析!
有15位网友表示赞同!
SAX解析效率高,内存占用低,非常适合开发移动应用。
有5位网友表示赞同!
如果XML文件很小的话,SAX解析是不是 overkill 了?
有12位网友表示赞同!
感觉SAX解析更像的是一个事件驱动的方式,这样读起来比较清晰。
有12位网友表示赞同!
我经常会遇到处理大型XML文件的场景,SAX解析或许是个不错的选择!
有15位网友表示赞同!
学习Android开发的 XML 解析工具,可以拓展我的能力范围!
有12位网友表示赞同!