java中以JDOM4的方式来对xml文件对象进行解析操作

要进行解析的xml文件对象

<?xml version="1.0" encoding="UTF-8" ?>
<bookstore>
	<book id="1">
		<name>冰与火之歌</name>
		<author>乔治马丁</author>
		<year>2014</year>
		<price>89</price>
	</book>
	<book id="2">
		<name>安徒生童话</name>
		<author>安徒生</author>
		<year>2017</year>
		<price>77</price>
		<language>Chinese</language>
	</book>
</bookstore>

源代码:

import java.io.File;
import java.util.ArrayList;
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 {
//以DOM4J方式来对xml文件对象进行解析操作
	public static void main(String[] args) {
		ArrayList<Book> bookList=new ArrayList<Book>();//建立一个集合对象用于将解析出来的book对象存放到集合对象当中去
		Book bookEmpty=null;//用于保存从xml文件对象所解析出来的book标签当中的数据信息
		//创建SAXReader对象
		SAXReader reader=new SAXReader();
		//通过SAXReader对象当中的read方法来对xml文件对象进行加载操作,并且获取document对象
		try {
			Document document=reader.read(new File("xml文件//books.xml"));
			Element bookStore=document.getRootElement();//获取当前xml文件对象当中的根节点
			//对根节点的子节点当中的数据信息值进行遍历操作
			Iterator it=bookStore.elementIterator();//获取一个对当前根节点当中的元素进行遍历操作迭代器对象
			//通过迭代器的遍历操作来对根节点当中的元素进行获取操作
			while(it.hasNext())
			{//当当前迭代器对象当中有对象内容时
				Element book=(Element)it.next();//将迭代器所获取到的object对象强制转化为节点类型对象
				System.out.println("===========开始对某一本书进行解析===========");
				bookEmpty=new Book();
				//获取book标签对象的属性名属性值及其子节点对象
				List<Attribute> bookAttrs=book.attributes();//获取book标签对象当中的全部属性值,并将其以数组的方式来进行存放操作
				for(Attribute attr : bookAttrs)
				{//对book标签属性集合对象当中的属性进行遍历输出操作
					System.out.println("属性名:"+attr.getName()+"----属性值:"+attr.getValue());//对当前所遍历到的book标签对象当中的属性值进行输出操作
					if(attr.getName().equals("id"))
					{//当前所解析出来的属性值为id属性,所以将其保存到book实体对象当中去
						bookEmpty.setId(attr.getValue());
					}
				}
			//对当前book标签对象当中的子结点进行遍历操作
				Iterator itera=book.elementIterator();//实例化一个book标签对象的子节点元素标签对象的迭代器对象
			//变量输出book标签对象当中的子结点对象	
				while(itera.hasNext())
				{//book对象的迭代器将会对book标签对象当中的子结点对象进行遍历输出操作
					 Element bookChild=(Element)itera.next();
					 System.out.println("结点名:"+bookChild.getName()+"---结点值:"+bookChild.getStringValue());
				//将当前所遍历得到的子结点对象当中的有效值保存到对应的book实体对象当中去	
					 if(bookChild.getName().equals("name"))
						 bookEmpty.setName(bookChild.getStringValue());
					 if(bookChild.getName().equals("author"))
						 bookEmpty.setAuthor(bookChild.getStringValue());
					 if(bookChild.getName().equals("year"))
						 bookEmpty.setYear(bookChild.getStringValue());
					 if(bookChild.getName().equals("price"))
						 bookEmpty.setPrice(bookChild.getStringValue());
					 if(bookChild.getName().equals("language"))
						 bookEmpty.setLanguage(bookChild.getStringValue());
				}
				bookList.add(bookEmpty);//将当前的book实体对象保存到集合对象当中去
				bookEmpty=null;
				System.out.println("===========结束对某一本书的解析=============");
			}
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("bookList集合对象当中一共保存了"+bookList.size()+"本书籍对象.");
		System.out.println("第一本书的名称为:"+bookList.get(0).getName());
		System.out.println("第二本书的名称为:"+bookList.get(1).getName());
	}

}
运行结果:



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值