XML--Java中的四种常见解析方式--jdom与dom4j

jdom与dom4j作为特地为java的实现,比较灵活适合熟悉Java的人

jdom主要构建方法

SAXBuilder sax=new SAXBuilder();

方法一:  InputStream in=new FileInputStream("rec\\books.xml");

            Document document=sax.build(in);
方法二:  Document document=sax.build("rec\\books.xml");

直接使用Element类获取节点  List接收集合

Element rootElement=document.getRootElement();

List<Element> booklist=rootElement.getChildren();

List<Attribute> attrlist=booktemp.getAttributes()

List<Element> childs=booktemp.getChildren();

PS:乱码不改xml文件编码类型是可用inputStreamReader包装 FileInputStream更改读取的编码方式,再将reader传入sax.bulid

public class Jdomtest {
private static List<book> bookslist=new ArrayList<book>();
    public static void main(String[] args) {
        SAXBuilder sax=new SAXBuilder();
        InputStream in;
        try {
//        in=new FileInputStream("rec\\books.xml");
//        Document document=sax.build(in);
        Document document=sax.build("rec\\books.xml");
        Element rootElement=document.getRootElement();
        List<Element> booklist=rootElement.getChildren();
        for (Element booktemp : booklist) {
            book bookbuf=new book();
            List<Attribute> attrlist=booktemp.getAttributes();
            System.out.println("解析第"+(booklist.indexOf(booktemp)+1)+"本书");
            for(Attribute attr:attrlist){
                System.out.println("解析书本的第"+(attrlist.indexOf(attr)+1)+"个属性");
                System.out.println(attr.getName()+":"+attr.getValue());
            if(attr.getName().equals("id"))
                bookbuf.id=attr.getValue();
            }
            List<Element> childs=booktemp.getChildren();
            for(Element child:childs){
                System.out.println(childs.indexOf(child)+1+":"+child.getName()+"----"+child.getValue());
                if(child.getName().equals("name"))
                    bookbuf.name=child.getValue();
                if(child.getName().equals("years"))
                    bookbuf.years=child.getValue();
                if(child.getName().equals("price"))
                    bookbuf.price=child.getValue();
            }
            bookslist.add(bookbuf);
            System.out.println("第"+(booklist.indexOf(booktemp)+1)+"本书解析完毕"+"成功添加了"+bookbuf.name);
            bookbuf=null;
        }
    for (book bookq : bookslist) {
        System.out.println("书名:"+bookq.name);
            System.out.println("出版年份:"+bookq.years);
            System.out.println("价格:"+bookq.price);
        } 

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }    // TODO Auto-generated method stub
 catch (JDOMException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    }

}

dom4j主要构建方法

SAXReader reader = new SAXReader();

Document document = reader.read(new File("rec/books.xml"));

其大致方法与jdom无异。

其获取子节点的方式常通过elementIterator实现得到一个Iterator

Iterator<Element> it = bookstore.elementIterator();

子节点根据不同类型有getStringValue();getIntValue()等

public class Jdom4jtest {
private static ArrayList<book> booklist=new ArrayList<book>();
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SAXReader reader = new SAXReader();
        try {
            Document document = reader.read(new File("rec/books.xml"));
            Element bookstore = document.getRootElement();
            Iterator<Element> it = bookstore.elementIterator();
            while (it.hasNext()) {
                book tempbook =new book();
                Element elementbook = it.next();
                List<Attribute> attributes = elementbook.attributes();
                System.out.println("开始遍历属性");
                for (Attribute attr : attributes) {
                    System.out.println("第" + attributes.indexOf(attr) + 1
                            + "个属性" + attr.getName() + ":"
                            + attr.getStringValue());
                    tempbook.id=attr.getStringValue();
                }
                Iterator<Element> itchild = elementbook.elementIterator();
                while (itchild.hasNext()) {
                    Element bookchild = itchild.next();
                    System.out.println(bookchild.getName() + "---"
                            + bookchild.getStringValue());
                    if(bookchild.getName().equals("name"))
                        tempbook.name=bookchild.getStringValue();
                    if(bookchild.getName().equals("years"))
                        tempbook.years=bookchild.getStringValue();
                    if(bookchild.getName().equals("price"))
                        tempbook.price=bookchild.getStringValue();
                }
                booklist.add(tempbook);
                tempbook=null;
            }
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        printbook();
    }
public static void printbook(){
    for (book booktemp : booklist) {
        System.out.println(booktemp.id+":"+booktemp.name);
        System.out.println("年份---"+booktemp.years);
        System.out.println("价格---"+booktemp.price);

    }

}
}

时间: 2024-12-14 17:38:24

XML--Java中的四种常见解析方式--jdom与dom4j的相关文章

XML--Java中的四种常见解析方式--dom

Java中常用的解析方式主要有四种: Java 自带:Dom.Sax. 外加包:Jdom.Dom4j. 1.Dom 主要的构建方式 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); DocumentBuilder db=dbf.newDocumentBuilder(); Document dm=db.parse("rec\\books.xml"); 其中节点类为Node  节点集合类为NodeList at

JAVA中十四种常见开发工具及其特点

1.JDK (Java Development Kit)Java开发工具集 SUN的Java不仅提了一个丰富的语言和运行环境,而且还提了一个免费的Java开发工具集(JDK).开发人员和最终用户可以利用这个工具来开发java程序. JDK简单易学,可以通过任何文本编辑器(如:Windows 记事本.UltrEdit.Editplus.FrontPage以及dreamweaver等)编写Java源文件,然后在DOS状况下利通过javac命令将Java源程序编译成字节码,通过Java命令来执行编译后

java中的四种单例实现方式

在java中,单例设计模式是非常常见的设计模式,对单例设计模式的概念,不做过多的介绍,下面将逐一介绍四种单例设计模式: 1.第一种单例设计模式 1.1 代码实现 package com.singleton.one; /**  * 第一种单例设计模式  * @author Administrator  *  */ public class SingleTonOne { // 实例化 private static SingleTonOne instance = new SingleTonOne();

JAVA中的四种引用以及ReferenceQueue和WeakHashMap的使用示例

简介: 本文主要介绍JAVA中的四种引用: StrongReference(强引用).SoftReferenc(软引用).WeakReferenc(弱引用).PhantomReference(虚引用)的作用.同时我们还将介绍ReferenceQueue和WeakHashMap的功能和使用示例. 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. JAVA中的四种引用 四种引用中,软引用.若引用.虚引用都需要相关类来创建.创建的时候

Java中的四种引用类型比较

1.引用的概念 引用这个概念是与JAVA虚拟机的垃圾回收有关的,不同的引用类型对应不同的垃圾回收策略或时机. 垃圾收集可能是大家感到难于理解的较难的概念之一,因为它并不能总是毫无遗漏地解决Java运行时环境中堆管理的问题. 垃圾回收的大致思路是:当Java虚拟机觉得内存不够用的时候,会触发垃圾回收操作(GC),清除无用的对象,释放内存.可是如何判断一个对象是否是垃圾呢?其中的一个方法是计算指向该对象的引用数量,如果引用数量为0,那么该对象就为垃圾(Thread对象是例外),否则还有用处,不能被回

Java 中的四种引用

1.强引用(Strong Reference)在 Java 中四种引用中是"最强"的,我们平时通过 new 关键字创建的对象都属于强引用,如下面的代码: Person person = new Person();其中的 person 就是一个强引用,只有当它不再被使用后才会被垃圾回收器回收掉.当内存不足时,但是其依然在被使用中,那么垃圾回收器也不会回收其引用的对象:JVM 宁愿报"内存泄漏错误 (OutofMemoryError)",终止程序也不会回收此引用所关联的

Java中的四种引用类型,强引用,软引用,弱引用,虚引用

对于Java中的垃圾回收机制来说,对象是否被回收的标准在于该对象是否被引用.因此,引用也是JVM进行内存管理的一个重要概念. Java中对象的引用一般有以下4种类型: 1强引用  2软引用  3弱引用  4虚引用 以下一一介绍其用法和区别 1强引用:在Java中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用.当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,即使该对象以后永远都不会被用到JVM也不会回收.因此强引用是造成Java内存泄漏的主

Java 中的四种引用及垃圾回收策略

Java 中有四种引用:强引用.软引用.弱引用.虚引用: 其主要区别在于垃圾回收时是否进行回收: 1.强引用 使用最普遍的引用.如果一个对象具有强引用,那就 类似于必不可少的生活用品,垃圾回收器绝不会回收它.当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题. 2.软引用(SoftReference) 如果一个对象只具有软引用,那就类似于可有可物的生活用品.如果内存空间足够,垃圾回收器就不会回收它,如果

java中的四种引用

Java 中有四种引用:强引用.软引用.弱引用.虚引用: 其主要区别在于垃圾回收时是否进行回收: 1.强引用 使用最普遍的引用.如果一个对象具有强引用,那就 类似于必不可少的生活用品,垃圾回收器绝不会回收它.当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题. 2.软引用(SoftReference) 如果一个对象只具有软引用,那就类似于可有可物的生活用品.如果内存空间足够,垃圾回收器就不会回收它,如果