Javaweb中使用Jdom解析xml的方法
一、前言
jdom是什么?
jdom是一个开源项目,基于树形结构,利用纯java的技术对xml文档实现解析,生成,序列化以及多种操作。它是直接为java编程服务,利用java语言的特性(方法重载,集合),把sax和dom的功能结合起来,尽可能的把原来解析xml变得简单,我们使用jdom解析xml会是一件轻松的事情。
jdom的优点:
1、jdom专用于java技术,比dom应用占用更少内存。
2、jdom提供更加简单和逻辑性访问xml信息的基础方法
3、除xml文件外,jdom还可以访问其他的数据源,例如可以创建类从sql查询结果中访问数据
jdom的构成:
jdom由6个包构成
element类表示xml文档的元素
org.jdom: 解析xml文件所要用到的基础类
org.jdom.adapters: 包含dom适配的java类
org.jdom.filter: 包含xml文档的过滤类
org.jdom.input: 包含读取xml文档的java类
org.jdom.output: 包含输出xml文档的类
org.jdom.trans form: 包含将jdom xml文档接口转换为其他xml文档接口的java类
xml是什么?
xml是一种广为使用的可扩展标记语言,java中解析xml的方式有很多,最常用的像jdom、dom4j、sax等等。
jdom包下载:http://www.jdom.org/downloads/index.html
这里笔者代码做的是使用java创建一个xml和读取一个xml,仅作为笔记介绍。
二、操作
下载jdom包,解压文件jdom-2.0.6.jar,jdom-2.0.6-javadoc.jar,将包导入到lib文件夹下。(注,如果有错误的话,将jdom中的包全部导入)
例子1:使用jdom创建一个xml文件,名字为people.xml
新建类careatejdom
package com.book.jdom; import java.io.filenotfoundexception; import java.io.fileoutputstream; import java.io.ioexception; import org.jdom2.document; import org.jdom2.element; import org.jdom2.output.format; import org.jdom2.output.xmloutputter; //生成xml文件 public class createjdom { public static void main(string[] args) { //定义元素 element people,student; people = new element("people"); student = new element("student"); //设置属性 student.setattribute("name", "张三"); student.setattribute("salary","8000"); //设置文本 student.settext("呵呵"); //将其添加到根目录下 people.addcontent(student); //新建一个文档。 document doc = new document(people); //读取格式,赋值给当前的format format format = format.getcompactformat(); //对当前格式进行初始化 format.setencoding("utf-8"); //设置xml文件缩进4个空格 format.setindent(" "); //建一个xml输出工厂,将格式给工厂 xmloutputter xmlout = new xmloutputter(format); try { //将其写好的文本给工厂,并且建一个文件输出流,将数据输出 xmlout.output(doc, new fileoutputstream("people.xml")); system.out.println("成功!"); } catch (filenotfoundexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } } } /*运行结果: <?xml version="1.0" encoding="utf-8"?> <people> <student name="张三" salary="8000" /> </people> * */
例子2:使用jdom解析people.xml文件
新建readxml类
package com.book.jdom; import java.io.ioexception; import java.util.list; import org.jdom2.document; import org.jdom2.element; import org.jdom2.jdomexception; import org.jdom2.input.saxbuilder; //读取people.xml文档 public class readxml { public static void main(string[] args) { //新建构造器解析xml saxbuilder sax = new saxbuilder(); //建一个文档去接受数据 document doc; try { //获取people.xml文档 doc = sax.build("people.xml"); //获得根节点 element people = doc.getrootelement(); //获得根节点下的节点数据 list<element> list = people.getchildren(); for(int i = 0;i<list.size();i++){ element e = list.get(i); //获得属性值 system.out.println("name:"+e.getattributevalue("name")+" salary:"+e.getattributevalue("salary")); //获得文本值 system.out.println(e.gettext()); } } catch (jdomexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } } } /* * 运行结果: * name:张三 salary:8000 呵呵 * */
解析xml
用jdom获取多个相同标签名的不同属性值的方法 <?xml version="1.0" encoding="utf-8"?> <configuration> <key name="china"> <value name="textkey">china</value> <value name="enabled">true</value> <value name="photoidwidth">38photoidwidth</value> <value name="photoidheight">38</value> <key name="adult"> <value name="crownpercent">0.10</value> <value name="headpercent">0.60adultheadpercent</value> </key> <key name="child"> <value name="crownpercent">0.10</value> <value name="headpercent">0.60childheadpercent</value> </key> </key> <key name="australia"> <value name="textkey">australia</value> <value name="enabled">true</value> <value name="photoidwidth">35photoidwidth</value> <value name="photoidheight">45</value> <key name="adult"> <value name="crownpercent">0.061</value> <value name="headpercent">0.756"adult"headpercent</value> </key> <key name="child"> <value name="crownpercent">0.072</value> <value name="headpercent">0.711childheadpercent</value> </key> </key> <key name="austria"> <value name="textkey">austria</value> <value name="enabled">true</value> <value name="photoidwidth">35photoidwidth</value> <value name="photoidheight">45</value> <key name="adult"> <value name="crownpercent">0.064</value> <value name="headpercent">0.744adultheadpercent</value> </key> <key name="child"> <value name="crownpercent">0.078</value> <value name="headpercent">0.689childheadpercent</value> </key> </key> </configuration> package input; import java.io.ioexception; import java.util.arraylist; import java.util.list; import org.jdom.document; import org.jdom.element; import org.jdom.jdomexception; import org.jdom.input.saxbuilder; public class readxml { /** * @param args */ public static void main(string[] args) throws jdomexception, ioexception { saxbuilder sb = new saxbuilder(); //构造文档对象 document doc = sb.build(test.class.getclassloader().getresourceasstream("nation.xml")); //获取根元素 element root = doc.getrootelement(); //定位到<configuration> -> <key> list<element> list = root.getchildren("key"); list<element> children = new arraylist<element>(); list<element> childrens = new arraylist<element>(); for (int i = 0; i < list.size(); i++) { element element = (element) list.get(i); system.out.print(element.getattributevalue("name")); //定位到<configuration> -> <key> -> <value> children = element.getchildren("value"); for(int j=0; j<children.size(); j++){ element elementchildren = (element) children.get(j); //定位到<configuration> -> <key> -> <value name="photoidwidth"> if(elementchildren.getattributevalue("name").equals("photoidwidth")){ //获取<configuration> -> <key> -> <value name="photoidwidth"> 属性值 system.out.print("<--------->"+elementchildren.getattributevalue("name")); //获取<configuration> -> <key> -> <value name="photoidwidth"> 标签里内容 system.out.print(","+elementchildren.gettext()); } } children.clear(); //定位到<configuration> -> <key> -> <key> children = element.getchildren("key"); for(int j=0; j<children.size(); j++){ element elementchildren = (element)children.get(j); //定位到<configuration> -> <key> -> <key name="child"> if(elementchildren.getattributevalue("name").equals("child")){ //定位到<configuration> -> <key> -> <key name="child"> -> <value> childrens = elementchildren.getchildren("value"); for(int k=0; k<childrens.size(); k++){ element elementchildrens = (element)childrens.get(k); //定位到<configuration> -> <key> -> <key name="child"> -> <value name="headpercent"> if(elementchildrens.getattributevalue("name").equals("headpercent")){ system.out.println("<--------->"+elementchildrens.gettext()); } } } } } } } 打印结果: china<--------->photoidwidth,38photoidwidth<--------->0.60childheadpercent australia<--------->photoidwidth,35photoidwidth<--------->0.711childheadpercent austria<--------->photoidwidth,35photoidwidth<--------->0.689childheadpercent
以上所述是小编给大家介绍的javaweb中使用jdom解析xml的方法,希望对大家有所帮助
上一篇: 实例解析如何正确使用Java数组
下一篇: Java资源缓存 之 LruCache