JDOM及DOM4J解析xml文件

来源:互联网 发布:淘宝热卖 编辑:程序博客网 时间:2024/03/28 17:44

JDOM及DOM4J都是java非官方的解析方式,所以都要引入jar包,JDOM方式需要导入jdom.jar,DOM4J方式需要导入dom4j.jar
解析xml文件有时会出现乱码问题:xml文件中定义的encoding不匹配
解决方法:
(1)针对xml文件:修改encoding字符集
(2)针对代码:创建字符流时,使用InputStreamReader(in, charsetName)

JDOM解析代码:

package com.imooc.jdomtest;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.List;import org.jdom.Attribute;import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;public class JDOMTest {    /**     * @param args     */    @SuppressWarnings("unchecked")    public static void main(String[] args) {        // 进行对book.xml文件的解析工作        // 1.创建一个SAXBuilder的对象        SAXBuilder saxBuilder = new SAXBuilder();        try {            // 2.创建一个输入流,将xml文件加载到输入流中            InputStream is = new FileInputStream("book.xml");            // 3.通过SAXBuilder的build方法,将输入流加载到SAXBuilder中            Document document = saxBuilder.build(is);            // 4.通过document对象获得xml文件的根节点            Element rootElement = document.getRootElement();            // 5.获取根节点下的子节点的List集合            List<Element> bookList = rootElement.getChildren();            // 继续进行解析            for (Element book : bookList) {                System.out.println("======开始解析第" + (bookList.indexOf(book) + 1)                        + "本书=====");                // //知道属性名称时                // Attribute att=book.getAttribute("id");                // 解析book的属性(针对不清楚属性个数和名称)                List<Attribute> attrList = book.getAttributes();                // 遍历attrList                for (Attribute attr : attrList) {                    // 获取属性名                    String attrName = attr.getName();                    // 获取属性值                    String attrValue = attr.getValue();                    System.out                            .println("属性名:" + attrName + "--属性值:" + attrValue);                }                // 对book结点的子节点进行遍历                List<Element> bookChildren = book.getChildren();                for (Element child : bookChildren) {                    System.out.println("结点名:" + child.getName() + "--结点值:"                            + child.getValue());                }                System.out.println("======结束解析第" + (bookList.indexOf(book) + 1)                        + "本书=====");            }        } catch (JDOMException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

DOM4J解析代码:

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 DOM4jTest {    /**     * @param args     */    @SuppressWarnings("unchecked")    public static void main(String[] args) {        // 解析book.xml        // 创建SAXReader对象        SAXReader reader = new SAXReader();        try {            // 通过reader对象的read方法加载xml文件            Document document = reader.read(new File("book.xml"));            // 通过document对象获得根节点            Element bookstore = document.getRootElement();            // 通过element对象elementIterator()方法获得迭代器            Iterator it = bookstore.elementIterator();            // 遍历迭代器,获取根节点中的信息            while (it.hasNext()) {                System.out.println("=================开始遍历某一本书================");                Element book = (Element) it.next();                // 获取book的属性名和属性值                List<Attribute> bookAttr = book.attributes();                for (Attribute attr : bookAttr) {                    System.out.println("属性名:" + attr.getName() + "--属性值:"                            + attr.getValue());                }                Iterator itt = book.elementIterator();                while (itt.hasNext()) {                    Element bookChild = (Element) itt.next();                    System.out.println("结点名:" + bookChild.getName() + "--结点值:"                            + bookChild.getStringValue());                }                System.out.println("=================结束遍历某一本书================");            }        } catch (DocumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

若希望导入的jar包能随着项目的迁移而迁移,可以在src下新建一个folder(取名lib),再将jar包拷到lib中,在Build Bath中添加lib中的jar包。

0 0
原创粉丝点击