JAVA 应用 DOM4J 及 JDOM 方式解析 XML

来源:互联网 发布:阮一峰javascript 算法 编辑:程序博客网 时间:2024/04/20 06:26

DOM4J方式

DOM4J及 JDOM 是非官方提供的,应用起来比较简洁。

步骤

获得dom4j解析器

SAXReader saxr = new SAXReader();

利用dom4j解析器的read()方法解析xml,获取docuemnt对象

Document docuemnt = saxr.read(new File("src/res/ProfessionalBooks.xml"));

获得xml文件的根节点

Element rootelement = docuemnt.getRootElement();

自己创建通用方法一层一层剥开xml文件

具体代码

import java.io.File;import java.util.Iterator;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class MyDOM4j {    /*     * 创建一个方法一层一成剥开xml文件     */    public static void PeelXml(Element rootelement) {        Iterator<Element> it = rootelement.elementIterator();        while (it.hasNext()) {            Element element = it.next();//          System.out.println("........开始.........");            System.out.println();            System.out.print("节点名:"+element.getName()+" ");            List<Attribute> ats = element.attributes();            if (ats.size() > 0) {                for (int i = 0; i < ats.size(); i++) {                    System.out.print("属性名:" + ats.get(i).getName() + "  " + "属性值:" + ats.get(i).getValue()+" ");                }            }            System.out.print("节点值:"+element.getTextTrim());//          System.out.println("........结束.........");            if(element.elementIterator().hasNext()){                PeelXml(element);            }        }    }    public static void main(String[] args) {        // TODO Auto-generated method stub        // 获得dom4j解析器        SAXReader saxr = new SAXReader();        // 利用dom4j解析器的read()方法解析xml,获取docuemnt对象        try {            Document docuemnt = saxr.read(new File("src/res/ProfessionalBooks.xml"));            // 获得xml文件的根节点            Element rootelement = docuemnt.getRootElement();            PeelXml(rootelement);        } catch (DocumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

注意:获得节点值时要用getTextTrim()避免输出来有很多空格和换行

JDOM方式

步骤

创建JDOM的解析器,saxbuilder

SAXBuilder saxbuilder = new SAXBuilder();

创建输入流,输入xml文件

 FileInputStream in;in = new FileInputStream("src/res/ProfessionalBooks.xml");InputStreamReader ins = new InputStreamReader(in, "UTF-8");

通过saxBuilder的build方法,将输入流加载到saxBuilder中获得Document对象

Document doc = saxbuilder.build(ins);

利用自己写的方法,一层一层剥开xml文件

具体代码

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.util.List;import org.jdom2.Attribute;import org.jdom2.Document;import org.jdom2.Element;import org.jdom2.JDOMException;import org.jdom2.input.SAXBuilder;public class MyJDOMTest {    /*     * 创建一个方法一层一成剥开xml文件     */    public static void PeelXml(Element rootelement) {        List<Element> Childrenelement = rootelement.getChildren();        for (Element element : Childrenelement) {            // System.out.println(".......开始.......");            System.out.println();            System.out.print("节点名:" + element.getName() + "   ");            List<Attribute> atli = element.getAttributes();            if (atli.size() != 0) {                for (int i = 0; i < atli.size(); i++) {                    System.out.print("属性名:" + atli.get(i).getName() + "   " + "属性值:" + atli.get(i).getValue() + "  ");                }            }            String value = element.getTextTrim();            // if (value.getBytes().length > 0) {            System.out.print("节点值:" + value);            // }            // System.out.print(".......结束.......");            if (element.getChildren().size() > 0) {                PeelXml(element);            }        }    }    public static void main(String[] args) {        // TODO Auto-generated method stub        // 创建JDOM的解析器,saxbuilder        SAXBuilder saxbuilder = new SAXBuilder();        FileInputStream in;        try {            in = new FileInputStream("src/res/ProfessionalBooks.xml");            InputStreamReader ins = new InputStreamReader(in, "UTF-8");            // 通过saxBuilder的build方法,将输入流加载到saxBuilder中            Document doc = saxbuilder.build(ins);            Element rootelement = doc.getRootElement();            PeelXml(rootelement);        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (JDOMException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        // 利用SAXBuilder的build()方法解析xml文件    }}

至于xml:http://blog.csdn.net/qq_23473123/article/details/51396153

2 0