XML解析 Dom4j,2024年京东Android岗面试必问

运行结果:

3、Dom4j 解析 XML

Dom4j,解析xml主要用到了org.dom4j.io.SAXReader、org.dom4j.Document、doc.getRootElement(),以及ele.getName()、ele.getText()等

首先,创建SAXReader的实例reader,读入xml字节流 reader.read(is)

接着,通过doc.getRootElement()得到root根节点,利用迭代器取得root下一级的子节点eleRoot.elementIterator()等

然后,得到解析的xml内容xmlWriter.append(xmlHeader)、xmlWriter.append(personsList.get(i).toString())

解析一:标准解析(Iterator 迭代)

Code

[java]  view plain copy print ?

  1. /** Dom4j方式,解析 XML  */

  2. public String dom4jXMLResolve(){

  3. StringWriter xmlWriter = new StringWriter();

  4. InputStream is = readXML(fileName);

  5. try {

  6. SAXReader reader = new SAXReader();

  7. org.dom4j.Document doc = reader.read(is);

  8. List personsList = null;

  9. Person person = null;

  10. StringBuffer xmlHeader = new StringBuffer();

  11. Element eleRoot = doc.getRootElement();     // 获得root根节点,引用类为 org.dom4j.Element

  12. String attrAuthor = eleRoot.attributeValue(“author”);

  13. String attrDate = eleRoot.attributeValue(“date”);

  14. xmlHeader.append(“root”).append(“\t\t”);

  15. xmlHeader.append(attrAuthor).append(“\t”);

  16. xmlHeader.append(attrDate).append(“\n”);

  17. personsList = new ArrayList();

  18. // 获取root子节点,即person

  19. Iterator iter = eleRoot.elementIterator();

  20. for(; iter.hasNext(); ) {

  21. Element elePerson = (Element)iter.next();

  22. if(“person”.equals(elePerson.getName())){

  23. person = new Person();

  24. // 获取person子节点,即id、name、blog

  25. Iterator innerIter = elePerson.elementIterator();

  26. for(; innerIter.hasNext()😉 {

  27. Element ele = (Element)innerIter.next();

  28. if(“id”.equals(ele.getName())) {

  29. String id = ele.getText();

  30. person.setId(Integer.parseInt(id));

  31. } else if(“name”.equals(ele.getName())) {

  32. String name = ele.getText();

  33. person.setName(name);

  34. } else if(“blog”.equals(ele.getName())) {

  35. String blog = ele.getText();

  36. person.setBlog(blog);

  37. }

  38. }

  39. personsList.add(person);

  40. person = null;

  41. }

  42. }

  43. xmlWriter.append(xmlHeader);

  44. int personsLen = personsList.size();

  45. for(int i=0; i<personsLen; i++) {

  46. xmlWriter.append(personsList.get(i).toString());

  47. }

  48. } catch (DocumentException e) {

  49. e.printStackTrace();

  50. } catch (Exception e) {

  51. e.printStackTrace();

  52. }

  53. return xmlWriter.toString();

  54. }

运行结果:

解析二:选择性解析(XPath路径)

Dom4j+XPath,选择性只解析id,doc.selectNodes(“//root//person//id”)

Code

[java]  view plain copy print ?

  1. /** Dom4j方式,解析 XML(方式二)  */

  2. public String dom4jXMLResolve2(){

  3. StringWriter xmlWriter = new StringWriter();

  4. InputStream is = readXML(fileName);

  5. try {

  6. org.dom4j.io.SAXReader reader = new org.dom4j.io.SAXReader();

  7. org.dom4j.Document doc = reader.read(is);

  8. List personsList = null;

  9. Person person = null;

  10. StringBuffer xmlHeader = new StringBuffer();

  11. Element eleRoot = doc.getRootElement();     // 获得root根节点,引用类为 org.dom4j.Element

  12. String attrAuthor = eleRoot.attributeValue(“author”);

  13. String attrDate = eleRoot.attributeValue(“date”);

  14. xmlHeader.append(“root”).append(“\t\t”);

  15. xmlHeader.append(attrAuthor).append(“\t”);

  16. xmlHeader.append(attrDate).append(“\n”);

  17. personsList = new ArrayList();

  18. @SuppressWarnings(“unchecked”)

  19. List idList = (List) doc.selectNodes(“//root//person//id”);   // 选择性获取全部id

  20. Iterator idIter = idList.iterator();

  21. while(idIter.hasNext()){

  22. person = new Person();

  23. Element idEle = (Element)idIter.next();

  24. String id = idEle.getText();

  25. person.setId(Integer.parseInt(id));

  26. personsList.add(person);

  27. }

  28. xmlWriter.append(xmlHeader);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

面试复习笔记:

这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
给文章留个小赞,就可以免费领取啦~

戳我领取:GitHub

《960页Android开发笔记》

《1307页Android开发面试宝典》

包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。

《507页Android开发相关源码解析》

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

开发笔记》**

[外链图片转存中…(img-aMg1JyO6-1710674120894)]

《1307页Android开发面试宝典》

包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。

[外链图片转存中…(img-RFcIyScr-1710674120894)]

《507页Android开发相关源码解析》

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值