宝宝不开心

用JDOM和DOM4J解析节点名节点值

1、用JDOM解析节点名和节点值

1、创建一个SAXBuilder对象

2、创建一个输入流, 将xml文件加载到文件中

3.   通过saxBuilder的方法,将输入流加载到saxBuilder

4.   通过document对象获取xml文件的根节点

5.   获取根节点下的子节点的List集合(蓝色部分

6、获取子节点的子节点的List集合(黄色部分

7、如果遇到了乱码可以修改xml文件的编码,或者用InputStreamReader承接(红色部分)

 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
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 JDOMTest {

    public static void main(String[] args) {
        //进行对book.xml的JDOM解析
        //准备工作
        //1、创建一个SAXBuilder对象
        SAXBuilder saxBuilder = new SAXBuilder();
        InputStream in;
        try {
            //2、创建一个输入流, 将xml文件加载到文件中
            in = new FileInputStream("src/res/book.xml");
       //InputStreamReader isr = new InputStreamReader(in, "UTF-8");
//3.通过saxBuilder的方法,将输入流加载到saxBuilder Document document = saxBuilder.build(in); //4.通过document对象获取xml文件的根节点 Element element = document.getRootElement(); //5.获取根节点下的子节点的List集合 List<Element> bookList = element.getChildren(); //继续进行解析 for(Element book: bookList) {
          //bookList.indexOf(book)得到book元素在bookList之中的位置,可以输出序号
                System.out.println("----------------开始解析第" + (bookList.indexOf(book) + 1)
                        + "本书---------------");
                //解析book的属性
                List<Attribute> attributes = book.getAttributes();
                for(Attribute attr: attributes) {
                    //获取属性值(知道属性名)
                    //String value = book.getAttributeValue("id");
                    //获取属性名和属性值(不知道属性名)
                    String attrName = attr.getName();
                    String attrValue = attr.getValue();
                    System.out.println("属性名" + attrName + "  属性值" + attrValue);
                }

//对book节点的子节点的节点名和节点值的遍历
//在JDOM中每个节点都有getChildren方法,都可以通过getName和getValue
//获取节点名和节点值
List<Element> bookChildren = book.getChildren();
for (Element bookChild : bookChildren) {
  System.out.println("属性名:" + bookChild.getName()
  + " 属性值:" + bookChild.getValue());
}

                System.out.println("----------------结束解析第" + (bookList.indexOf(book) + 1)
                        + "本书---------------");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (JDOMException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

8、存入book类中,在上一篇《用SAX方法解析xml文件》中有代码,这里不再赘述,传送门:https://www.cnblogs.com/songaodi/p/9323830.html

9、在使用JDOM过程中,如果要把你的java工程export其他电脑上,jar包不会跟随工程export,因为它只是引用了jar包,那么怎么让jar包跟着工程走呢?往下看

(1)、把jar包取消导入,点击remove

(2)我们发现程序报错了,因为找不到包了

(3)在工程下建一个folder,把jar包复制过来

 

 (4)选中jar包加入工程Build Path --->Add JARs

(5)完成了!!!

 

10、用DOM4J解析节点名和节点值

package cn.edu.zzuli.DOM4JTest;

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 DOM4J {

    public static void main(String[] args) {
        //解析xml文件
        //创建SAXReader的对象reader
        SAXReader reader = new SAXReader();
        try {
            //通过reader对象的read方法加载book。xml文件
            Document document = reader.read(new File("src/res/book.xml"));
            //通过document的getRootElement获取根节点
            Element bookstore = document.getRootElement();
            //遍历根节点的子节点,用Element对象的elementIterator获取子节点的迭代器
            Iterator<Element> booksIterator = bookstore.elementIterator();
            //遍历迭代器,获取根节点的信息
            while(booksIterator.hasNext()) {
                System.out.println("------开始遍历某本书---------");
                Element book = booksIterator.next();
                //获取book的属性名和属性值
                List<Attribute> bookattributes = book.attributes();
                for (Attribute attribute : bookattributes) {
                    System.out.println("属性名: " + attribute.getName() + "--属性值:"
                            + attribute.getValue());
                }
                //遍历book节点子节点,elementIterator得到迭代器
                Iterator it2 = book.elementIterator();
                while(it2.hasNext()) {
                    Element bookChild = (Element)it2.next();
                    System.out.println("节点名:" + bookChild.getName() + "--节点值:"
                            + bookChild.getStringValue());
                }
                System.out.println("------结束遍历某本书---------");
            }
        } catch(DocumentException e) {
            e.printStackTrace();
        }

    }

}

 

posted on 2018-07-18 16:58  宝宝不开心  阅读(2062)  评论(0编辑  收藏  举报

导航