JDOM操作XML实例

使用JDOM来解析XML文件

JDOM是使用Java语言编写的、用于读、写、操作XML的一套组件。JDOM具有DOM修改文件的优点,JD和SAX读取快速的优点。

JDOM的主要操作类:

Document 定义了一个XML文件的各种操作,用户可以通过它所提供的方法来存取根元素。

Element 定义了一个XML元素的各种操作,用户可以通过它得到元素的文字内容,属性值和子节点。

Attribute XML文件元素中属性的各个操作。

XMLOutputter 将一个JDOM结构树格式化为一个XML文件,并且以输出流的方式加以输出。


实例:使用JDOM生成如下结构的xml

 <?xml version="1.0" encoding="GBK" ?> 
<QQInfo>
 <info id="tsby">
  <name>天水伯约</name> 
  <QQ>1031568262</QQ> 
  </info>
  </QQInfo>

public static void main(String[] args) {
	
		Element QQInfo = new Element("QQInfo");
		Element info = new Element("info");
		Element name = new Element("name");
		Element QQ = new Element("QQ");
		Attribute attr = new Attribute("id","tsby");
		name.setText("天水伯约");
		QQ.setText("1031568262");
		info.addContent(name);
		info.addContent(QQ);
		info.setAttribute(attr);
		QQInfo.setContent(info);
		Document doc = new Document(QQInfo);
		XMLOutputter out = new XMLOutputter();
		out.setFormat(out.getFormat().setEncoding("GBK"));
		try {
			out.output(doc, new FileOutputStream("D:\\JDOM_QQInfo.xml"));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

①通过上面代码,定义一个根节点QQInfo 然后定义节点info name QQ,定义个id属性,并初始化值。用过Element类的setText()方法设置节点name,QQ的内容。

②使用Element类的addContent()方法,将name节点、QQ节点做info的子节点。同样使用该方法,将info节点作为QQInfo的子节点。

③使用Document doc = new Document(QQInfo),创建一个QQInfo作为根节点的Document对象。

④XMLOutputter out = new XMLOutputter();创建XMLOutputter对象,用于输出XML文件。

out.setFormat(out.getFormat().setEncoding("GBK"));设置输出的编码格式

out.output(doc, new FileOutputStream("D:\\JDOM_QQInfo.xml"));输出XML文件到D盘的JDOM_QQInfo.xml文件中。

程序运行结果和预期的一样,D盘下生成JDOM_QQInfo.xml文件。

<?xml version="1.0" encoding="GBK"?>
<QQInfo><info id="tsby"><name>天水伯约</name><QQ>1031568262</QQ></info></QQInfo>

生成XML文件已经完成,接下来演示读取该XML文件并解析。


public static void main(String[] args) {
		//使用JDOM读取本地文件解析
		SAXBuilder build = new SAXBuilder();
		Document doc = null;
		try {
			doc = build.build("D:\\JDOM_QQInfo.xml");
		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		Element QQInfo = doc.getRootElement();
		List<Element> list = QQInfo.getChildren("info");
		for(int i=0;i<list.size();i++) {
			Element info = list.get(i);
			String name = info.getChildText("name");
			String QQ = info.getChildText("QQ");
			String id = info.getAttributeValue("id");
			System.out.println("name:"+name+" QQ:"+QQ+" id:"+id);
		}
		
	}

运行结果为:

name:天水伯约 QQ:1031568262 id:tsby

从程序中可以看出,JDOM使用了SAX(simple APIs for XML)解析的方式来操作。

①首先建立一个SAXBuilder对象,用于构建Doc

SAXBuilder builder = new SAXBuilder()

②读取本地的XML文件并构建Document

Document doc = builder.build("D:\\JDOM_QQInfo.xml");

③利用Document对象的方法RootElement()得到XML的根元素

Element QQInfo = doc.getRootElement();

④有了这个根元素就可以通过getChildren()方法一次取得所有的info元素,在JDOM中所有的节点都是以集合的形式返回的,集合中每一个对象都是Element实例

List<Element> list = QQInfo.getChildren("info")

⑤遍历循环出每个Element,通过getChildText()取得节点的值,通过getAttributeValue()取得属性的值(或者getAttribute("id").getValue())


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值