JDOM操作XML实例

来源:互联网 发布:及时生成字幕软件 编辑:程序博客网 时间:2024/06/04 19:46

使用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())


0 0