当前位置: 移动技术网 > IT编程>开发语言>Java > Javaweb中使用Jdom解析xml的方法

Javaweb中使用Jdom解析xml的方法

2019年07月22日  | 移动技术网IT编程  | 我要评论

男生的jj,九阳豆浆机电路图,女子学院一夜情攻略

一、前言

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/

这里笔者代码做的是使用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的方法,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网