欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Javaweb中使用Jdom解析xml的方法

程序员文章站 2024-03-13 13:45:57
一、前言 jdom是什么? jdom是一个开源项目,基于树形结构,利用纯java的技术对xml文档实现解析,生成,序列化以及多种操作。它是直接为java编程服务,利用j...

一、前言

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中的包全部导入)

Javaweb中使用Jdom解析xml的方法

例子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的方法,希望对大家有所帮助