运行结果:
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 ?
-
/** Dom4j方式,解析 XML */
-
public String dom4jXMLResolve(){
-
StringWriter xmlWriter = new StringWriter();
-
InputStream is = readXML(fileName);
-
try {
-
SAXReader reader = new SAXReader();
-
org.dom4j.Document doc = reader.read(is);
-
List personsList = null;
-
Person person = null;
-
StringBuffer xmlHeader = new StringBuffer();
-
Element eleRoot = doc.getRootElement(); // 获得root根节点,引用类为 org.dom4j.Element
-
String attrAuthor = eleRoot.attributeValue(“author”);
-
String attrDate = eleRoot.attributeValue(“date”);
-
xmlHeader.append(“root”).append(“\t\t”);
-
xmlHeader.append(attrAuthor).append(“\t”);
-
xmlHeader.append(attrDate).append(“\n”);
-
personsList = new ArrayList();
-
// 获取root子节点,即person
-
Iterator iter = eleRoot.elementIterator();
-
for(; iter.hasNext(); ) {
-
Element elePerson = (Element)iter.next();
-
if(“person”.equals(elePerson.getName())){
-
person = new Person();
-
// 获取person子节点,即id、name、blog
-
Iterator innerIter = elePerson.elementIterator();
-
for(; innerIter.hasNext()😉 {
-
Element ele = (Element)innerIter.next();
-
if(“id”.equals(ele.getName())) {
-
String id = ele.getText();
-
person.setId(Integer.parseInt(id));
-
} else if(“name”.equals(ele.getName())) {
-
String name = ele.getText();
-
person.setName(name);
-
} else if(“blog”.equals(ele.getName())) {
-
String blog = ele.getText();
-
person.setBlog(blog);
-
}
-
}
-
personsList.add(person);
-
person = null;
-
}
-
}
-
xmlWriter.append(xmlHeader);
-
int personsLen = personsList.size();
-
for(int i=0; i<personsLen; i++) {
-
xmlWriter.append(personsList.get(i).toString());
-
}
-
} catch (DocumentException e) {
-
e.printStackTrace();
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
return xmlWriter.toString();
-
}
运行结果:
解析二:选择性解析(XPath路径)
Dom4j+XPath,选择性只解析id,doc.selectNodes(“//root//person//id”)
Code
[java] view plain copy print ?
-
/** Dom4j方式,解析 XML(方式二) */
-
public String dom4jXMLResolve2(){
-
StringWriter xmlWriter = new StringWriter();
-
InputStream is = readXML(fileName);
-
try {
-
org.dom4j.io.SAXReader reader = new org.dom4j.io.SAXReader();
-
org.dom4j.Document doc = reader.read(is);
-
List personsList = null;
-
Person person = null;
-
StringBuffer xmlHeader = new StringBuffer();
-
Element eleRoot = doc.getRootElement(); // 获得root根节点,引用类为 org.dom4j.Element
-
String attrAuthor = eleRoot.attributeValue(“author”);
-
String attrDate = eleRoot.attributeValue(“date”);
-
xmlHeader.append(“root”).append(“\t\t”);
-
xmlHeader.append(attrAuthor).append(“\t”);
-
xmlHeader.append(attrDate).append(“\n”);
-
personsList = new ArrayList();
-
@SuppressWarnings(“unchecked”)
-
List idList = (List) doc.selectNodes(“//root//person//id”); // 选择性获取全部id
-
Iterator idIter = idList.iterator();
-
while(idIter.hasNext()){
-
person = new Person();
-
Element idEle = (Element)idIter.next();
-
String id = idEle.getText();
-
person.setId(Integer.parseInt(id));
-
personsList.add(person);
-
}
-
xmlWriter.append(xmlHeader);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
面试复习笔记:
这份资料我从春招开始,就会将各博客、论坛。网站上等优质的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文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。