XML解析
来源:互联网 发布:sam smith 知乎 编辑:程序博客网 时间:2024/06/05 20:58
对于解析XML解析,到现在为止有很多种,从早期的DOM解析 SAX解析 后来又出现了JAXP,JDOM,jsoup,dom4j。现在最流行的解析方式就会是dom4j。
简单说下这几种解析方式的优点跟缺点。(具体不讲,因为大部分已被淘汰)
DOM解析:
优点:因为此解析方式会将整个内容打包成DOM树加载到内存,所以结构明显,易于更改
缺点:因为他将所有的文件一次性加载到内存,所以很容易造成内存溢出
SAX解析:
优点:采用事件驱动解析,逐行加载,内存消耗少,适用于查找搜索
缺点:编码麻烦,因为逐行检索,检索到下一行,上一行就没了,所以很难同时访问多处不同 的数据,也不利于修改数据。
JDOM解析:
优点:
1、使用具体类而不是接口,简化了DOM的API。
2、大量使用了Java集合类,方便了Java开发人员。
缺点:
1、没有较好的灵活性。
2、性能较差。
JAXP解析跟dom4j解析:
特征:目前比较流行的解析方式,两种解析方式都实现了DOM+SAX的解析方式;
但DOM4J是目前性能最好,包括Sun的JAXM也在使用DOM4J。目前许多开源项目都大量用DOM4J。比如Hibernate。
解析代码
这里就讲解下DOM4J了,谁让他是现在最好的解析方式,同时也是用的最多的解析方式。
新建一个web工程,将DOM4J的jar包放到WebRoot/WEB-INF中,他会自动加载jar包。
然后在WebRoot路径下创建Book.xml
<?xml version="1.0" encoding="UTF-8"?> <书架> <书 出版社="中国特大出版社"> <书名>魔兽世界编年史</书名> <作者>BLZ</作者> <单价>199</单价> <批发价>200</批发价> </书> <书> <书名>魔兽世界</书名> <作者>blz</作者> <单价>201</单价> </书> </书架>
新建测试类dom4jTest
1.原生解析(先拿解析第二本书做事例)
@Testpublic void test01() throws Exception { SAXReader reader = new SAXReader();// 创建一个xml解析对象 Document document = reader.read("WebRoot/Book.xml");// 把xml加载到Doucument中 Element root = document.getRootElement();//获得根目录节点 List<?> list = root.elements();//获得根目录节点下,所有元素(标签) Element secondBook = (Element) list.get(1);//拿到第二本书的节点 Element bookNode = secondBook.element("书名");//获得书名节点 System.out.println(bookNode.getText());//获得内容 }
2.递归遍历所有内容
@Test public void test02() throws Exception { SAXReader reader = new SAXReader();// 创建一个xml解析对象 Document read = reader.read("WebRoot/Book.xml");// 把xml加载到Doucument中 Element root = read.getRootElement();//获得根目录节点 treeWalk(root); } private void treeWalk(Element root) { System.out.print(root.getName()+" ");//打印根目录节点 for (int i = 0; i < root.nodeCount(); i++) {//小于根节点下所有节点总和 Node node = root.node(i);//获得第i节点下的节点 if (node instanceof Element) {//判断,如果此节点仍然为节点元素,那么继续判断。否则打印内容 treeWalk((Element) node); }else { System.out.print(node.getText()+" "); } } }
最后解析出:
书架 书 书名 魔兽世界编年史 作者 BLZ 单价 199 批发价 200 书 书名 魔兽世界 作者 blz 单价 201
- XML解析
- xml解析
- XML解析
- 解析XML
- xml解析
- 解析xml
- 解析xml
- xml解析
- XML解析
- xml解析
- XML解析
- xml解析
- xml解析
- xml解析
- xml解析
- xml解析
- 解析xml
- XML解析
- 集群上配置Keepalived实现负载均衡
- Sort it
- 敏捷过程
- ucos-iii学习之系统内部任务
- 八、计算机网络之TCP/IP与配置
- XML解析
- HDU 6199 gems gems gems [DP+DP优化]
- 关于webpack和vue系列框架(vue-cli),后台返回本地图片的url在本地显示不出来
- 用开源代码构建机器人需要考虑的问题
- Gradle版本号不匹配导致的错误解决办法
- 【Java概念】继承(8)
- 【LeetCode】Manacher算法+Longest Palindromic Substring(最长回文子串)
- java is-a has-a
- 数据结构与算法:二叉树