Java解析xml——JDOM解析

本文介绍了一种使用Java库JDOM解析XML文件的方法。通过一个具体的书籍信息XML文件示例,展示了如何读取和解析XML文件中的各种元素及属性。具体步骤包括创建SAXBuilder对象、加载XML文件、获取根元素及其子元素等。

一、导入jar包

JDOM不是Java提供的解析xml的方式,所以需要导入额外的jar包,可以去官方网站下载。


二、JDOM解析实例

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
	<book id="1">
		<name>冰与火之歌</name>
		<author>乔治马丁</author>
		<time>2014</time>
		<price>89</price>
	</book>
	<book id="2">
		<name>安徒生童话</name>
		<price>40</price>
		<time>2004</time>
		<language>English</language>
	</book>
</bookstore>
JDomDemo.java

public class JDomDemo {
	public static void main(String[] args) {
		//1、创建SAXBuilder对象
		SAXBuilder saxBuilder = new SAXBuilder();
		InputStream in;
		try {
			//2、创建输入流,并将xml文件加载到输入流中
			in = new FileInputStream("xml/books.xml");
			//3、将输入流加载到SAXBuilder对象中
			Document document = saxBuilder.build(in);

			//4、获取根元素
			Element element = document.getRootElement();
			//5、获取根元素的所有子元素
			List<Element> childList = element.getChildren();
			//6、遍历每一个子元素
			for (Element child : childList) {
				System.out.println("===开始读取第" + (childList.indexOf(child) + 1) + "本书的信息===");
				//7-1、如果不知道属性有哪些,使用Element.getAttributes获取属性,并遍历属性
				List<Attribute> attrList = child.getAttributes();
				for(Attribute attr : attrList) {
					System.out.println("属性名:" + attr.getName() + "-->属性值:" + attr.getValue());
				}
				//7-2、如果知道属性有哪些,可以直接调用Element.getAttributeValue(String name)获取对应的属性值
				System.out.println("已知有id属性,id属性的值为" + child.getAttributeValue("id"));
				
				//8、获取所有子节点,并调用Element.getName()方法获取节点名,调用Element.getVlaue()方法获取节点值
				List<Element> list = child.getChildren();
				for(Element ele : list) {
					System.out.println("子节点:" + ele.getName() + "--->子节点的值:" + ele.getValue());
				}
				System.out.println("===读取第" + (childList.indexOf(child) + 1) + "本书的信息结束===");
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


运行结果:

===开始读取第1本书的信息===
属性名:id-->属性值:1
已知有id属性,id属性的值为1
子节点:name--->子节点的值:冰与火之歌
子节点:author--->子节点的值:乔治马丁
子节点:time--->子节点的值:2014
子节点:price--->子节点的值:89
===读取第1本书的信息结束===
===开始读取第2本书的信息===
属性名:id-->属性值:2
已知有id属性,id属性的值为2
子节点:name--->子节点的值:安徒生童话
子节点:price--->子节点的值:40
子节点:time--->子节点的值:2004
子节点:language--->子节点的值:English
===读取第2本书的信息结束===



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值