xml之JDOM解析(含乱码处理)

注:需导入jdom相关jar包

package com.suse.jdomtest;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
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;

import com.suse.entity.Book;

public class JDOMTest {
    private static  ArrayList<Book>  booksList=new ArrayList<Book>();
    /**
     * @param args
     * @throws IOException
     * @throws JDOMException
     */
    public static void main(String[] args) throws JDOMException, IOException {
        // 进行对books.xml文件的JDOM解析
        // 1创建一个SAXBuilder对象
        SAXBuilder saxBuilder = new SAXBuilder();
        // 2创建一个输入流将xml加载到输入流中
        InputStream in;
        in = new FileInputStream("src/res/books.xml");
        InputStreamReader isr = new InputStreamReader(in, "UTF-8");// 处理乱码问题,一个是更改xmL格式
                                                                   // 而是通过
                                                                   // InputStreamReader来设置
        // 3通过SAXBuilder中的build方法将输入流加载到SAXBuilder中

        Document document = saxBuilder.build(isr);
        // document getRootElement()获取xml文件的根结点
        Element rootElement = document.getRootElement();
        // 获取根结点之下的子节点
        List<Element> bookList = rootElement.getChildren();
        // bookList.size();如果for 循环就要得到要遍历的对象的长度
        // 继续进行解析
        for (Element book : bookList) {// indexOf(book)过去书的编号从0开始
            Book bookEntity=new Book();
            System.out.println("开始解析" + (bookList.indexOf(book) + 1)
                    + "书==========");
            // 解析book的属性集合
            List<Attribute> attrList = book.getAttributes();
            // book.getAttributeValue("id");//知道结点下名称时
            // 遍历attrList(针对不清楚book结点下属性的名字及数量)
            for (Attribute attr : attrList) {
                // 获取属性名
                String attrName = attr.getName();
                // 获取属性值
                String attrValue = attr.getValue();
                System.out.println("属性名:" + attrName + "-------属性值:"
                        + attrValue);
                if(attrName.equals("id")) {
                    System.out.println(attrValue);
                    bookEntity.setId(attrValue);
                }
            }
            // 对book结点的子节点的节点名以及节点的值进行遍历
            List<Element> bookChildren = book.getChildren();
            for (Element child : bookChildren) {
                System.out.println("节点名:" + child.getName() + "------节点值"
                        + child.getValue());

                if(child.getName().equals("name")) {
                    bookEntity.setName(child.getValue());}
                    else if(child.getName().equals("author")){
                        bookEntity.setAuthor(child.getValue());

                        }
                    else if(child.getName().equals("year")) {
                        bookEntity.setYear(child.getValue());
                    }
                    else if(child.getName().equals("price")){
                        bookEntity.setPrice(child.getValue());
                        }
                        else if(child.getName().equals("language")) {
                            bookEntity.setLanguage(child.getValue());
                        }

                    }



            System.out.println("结束解析" + (bookList.indexOf(book) + 1)
                    + "书==========");
            booksList.add(bookEntity);
            bookEntity=null;
            System.out.println(booksList.size());
            System.out.println(booksList.get(0).getId());
            System.out.println(booksList.get(0).getName());

        }

    }

}
package com.suse.entity;

public class Book {
    private String id;

    private String name;

    private String author;

    private String year;

    private String price;

    private String language;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getYear() {
        return year;
    }

    public void setYear(String year) {
        this.year = year;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public String getLanguage() {
        return language;
    }

    public void setLanguage(String language) {
        this.language = language;
    }

    // 私有属性定义后是外部无法方法的,所以要添加get/set方法,体现了封装的特性

}
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book  id="1">
<name>冰与火之歌</name>
<author>乔治马丁</author>
<year>2014</year>
<price>89</price>
</book>
<book id="2">
<name>安徒生童话</name>
<year>2004</year>
<price>66</price>
<language>English</language>
</book>
</bookstore>

result:

开始解析1书==========
属性名:id——-属性值:1
1
节点名:name——节点值冰与火之歌
节点名:author——节点值乔治马丁
节点名:year——节点值2014
节点名:price——节点值89
结束解析1书==========
1
1
冰与火之歌
开始解析2书==========
属性名:id——-属性值:2
2
节点名:name——节点值安徒生童话
节点名:year——节点值2004
节点名:price——节点值66
节点名:language——节点值English
结束解析2书==========
2
1
冰与火之歌

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值