欢迎来真孝善网,为您提供真孝善正能量书籍故事!

Android XML文件解析技巧:SAX方法详解

时间:11-15 现代故事 提交错误

老铁们,大家好,相信还有很多朋友对于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分析的内容兼容,不再赘述。

用户评论

早不爱了

我想了解一下SAX解析有哪些优势,和DOM解析相比怎么样?

    有17位网友表示赞同!

发型不乱一切好办

我刚开始学Android开发,想问问SAX解析怎么用,有详细教程吗?

    有16位网友表示赞同!

尘埃落定

学习XML解析挺有意思的,SAX解析看起来更轻量级,适合处理大文件吧?

    有12位网友表示赞同!

裸睡の鱼

我最近项目中用到SAX解析,感觉代码比较简洁,效率也还不错。

    有9位网友表示赞同!

冷落了♂自己·

这篇文章看来讲解得很透彻!能给我一些实例代码吗?方便学习一下。

    有10位网友表示赞同!

爱情的过失

请问,用SAX解析的时候,需要提前知道XML文件的大小吗?

    有9位网友表示赞同!

我绝版了i

我有点不太明白event handler的作用,它具体是怎么接收数据的?

    有10位网友表示赞同!

苏莫晨

SAX分析速度快这一点很吸引我,适合我的项目需求,我会来试试!

    有20位网友表示赞同!

回忆未来

Android开发中除了SAX解析 XML 文件,还有什么其他的方法吗?

    有16位网友表示赞同!

眷恋

学习一下SAX解析,能够让我更全面地掌握Android开发的XML处理知识吧?

    有6位网友表示赞同!

oО清风挽发oО

请问SAX解析适合处理复杂嵌套的XML文件吗?

    有14位网友表示赞同!

一生荒唐

这篇文章讲得太详细了,我终于明白了SAX解析的基本原理。

    有19位网友表示赞同!

如你所愿

我想知道SAX解析和DOM解析哪个更加灵活,更容易使用呢?

    有13位网友表示赞同!

剑已封鞘

学习编程的关键是掌握各种工具和方法,现在就来学习一下SAX解析!

    有15位网友表示赞同!

满心狼藉

SAX解析效率高,内存占用低,非常适合开发移动应用。

    有5位网友表示赞同!

灼痛

如果XML文件很小的话,SAX解析是不是 overkill 了?

    有12位网友表示赞同!

ヅ她的身影若隐若现

感觉SAX解析更像的是一个事件驱动的方式,这样读起来比较清晰。

    有12位网友表示赞同!

七级床震

我经常会遇到处理大型XML文件的场景,SAX解析或许是个不错的选择!

    有15位网友表示赞同!

我一个人

学习Android开发的 XML 解析工具,可以拓展我的能力范围!

    有12位网友表示赞同!

【Android XML文件解析技巧:SAX方法详解】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活