JDOM解析XML案例Demo(三)

一、简介

    Jdom是一个开源项目,基于树形结构,利用纯java的技术对XML文档实现解析,生成,序列化以及多种操作。它是直接为java编程服务,利用java语言的特性(方法重载,集合),把SAX和DOM的功能结合起来,尽可能的把原来解析xml变得简单,我们使用Jdom解析xml会是一件轻松的事情。

Jdom的优点:

  • Jdom专用于java技术,比Dom应用占用更少内存。
  • Jdom提供更加简单和逻辑性访问xml信息的基础方法
  • 除xml文件外,Jdom还可以访问其他的数据源,例如可以创建类从SQL查询结果中访问数据

Jdom由6个包构成:

    Element类表示XML文档的元素

  • org.jdom:      解析xml文件所要用到的基础类
  • org.jdom.adapters:     包含DOM适配的Java类
  • org.jdom.filter:       包含xml文档的过滤类
  • org.jdom.input:      包含读取XML文档的Java类
  • org.jdom.output:        包含输出XML文档的类
  • org.jdom.trans form:  包含将Jdom xml文档接口转换为其他XML文档接口的Java类

二、xml文件

<?xml version = "1.0" encoding = "utf-8"?>
<books>
	<book id="1">
		<name>冰与火之歌</name>
		<author>张三</author>
		<pice>99</pice>
	</book>
	<book id="2">
		<name>葫芦娃</name>
		<pice>99</pice>
		<year>1993</year>
	</book>
</books>

三、JDOM案例

    因为jdom是第三方提供的xml解析模式,所以需要将Jdom中的包导入进来。

package com.da.xml;

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) {
		//创建SAXBuilder实例
		SAXBuilder saxBuilder = new SAXBuilder();
		InputStream io = null;
		try {
			//创建一个输入流,将xml文件加载到输入流中
			FileInputStream in = new FileInputStream("books.xml");
			//通过saxBuilder中的build方法,将输入流加载到saxBuilder
			Document build = saxBuilder.build(in);
			//通过Document对象获取xml文件的根节点
			Element rootElement = build.getRootElement();
			//获取根节点下的子节点的List集合
			List<Element> booklist = rootElement.getChildren();
			
			for (Element book : booklist) {
				System.out.println("解析第"+(booklist.indexOf(book)+1)+"本书");
				//不知道属性名的情况下进行遍历
				List<Attribute> attributes = book.getAttributes();
				for (Attribute attr : attributes) {
					System.out.println("属性名:"+attr.getName()+":"+attr.getValue());
				}
				//知道属性名下参数的个数直接进行获取。
//				String attributeValue = book.getAttributeValue("id");
//				System.out.println(attributeValue);
				//遍历book子节点的节点名与节点值
				List<Element> children = book.getChildren();
				for (Element element : children) {
					System.out.println("节点:"+element.getName()+":"+element.getValue());
				}
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (JDOMException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

    结果

解析第1本书
属性名:id:1
节点:name:冰与火之歌
节点:author:张三
节点:pice:99
解析第2本书
属性名:id:2
节点:name:葫芦娃
节点:pice:99
节点:year:1993

四、扩展

    使用 JDOM 解析将 XML 的内容和结构存入 JAVA 对象

    给xml进行转码InputStreamReader str= new InputStreamReader(io, "utf-8");

    

转载于:https://my.oschina.net/Clarences/blog/1789436

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值