JDOM及DOM4J解析xml文件

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 bookList = rootElement.getChildren();
            // 继续进行解析
            for (Element book : bookList) {
                System.out.println("======开始解析第" + (bookList.indexOf(book) + 1)
                        + "本书=====");
                // //知道属性名称时
                // Attribute att=book.getAttribute("id");
                // 解析book的属性(针对不清楚属性个数和名称)
                List attrList = book.getAttributes();
                // 遍历attrList
                for (Attribute attr : attrList) {
                    // 获取属性名
                    String attrName = attr.getName();
                    // 获取属性值
                    String attrValue = attr.getValue();
                    System.out
                            .println("属性名:" + attrName + "--属性值:" + attrValue);
                }
                // 对book结点的子节点进行遍历
                List 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 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包。

你可能感兴趣的:(java+xml)