转载

JDOM解析XML文档

JDOM不光可以很方便的建立XML文档,它的另一个用处是它能够读取并操作现有的 XML 数据。

JDOM的解析器在org.jdom.input.*这个包里,其中的DOMBuilder的功能是将DOM模型的Document解析成JDOM模型的Document;SAXBuilder的功能是从文件或流中解析出符合JDOM模型的XML 树。由于我们经常要从一个文件里读取数据,因此我们应该采用后者作为解析工具。

解析一个xml文档,基本可以看成以下几个步骤:

1.实例化一个合适的解析器对象

本例中我们使用SAXBuilder:

SAXBuilder sb = new SAXBuilder();

2.以包含XML数据的文件为参数,构建一个文档对象myDocument

Document myDocument = sb.build(/some/directory/myFile.xml);

3.获到根元素

Element rootElement = myDocument.getRootElement();

一旦你获取了根元素,你就可以很方便地对它下面的子元素进行操作了,下面对Element对象的一些常用方法作一下简单说明:

getChild("childname") 返回指定名字的子节点,如果同一级有多个同名子节点,则只返回第一个;如果没有返回null值。

getChildren("childname") 返回指定名字的子节点List集合。这样你就可以遍历所有的同一级同名子节点。

getAttributeValue("name") 返回指定属性名字的值。如果没有该属性则返回null,有该属性但是值为空,则返回空字符串。

getChildText("childname") 返回指定子节点的内容文本值。

getText() 返回该元素的内容文本值。

还有其他没有罗列出来的方法,如果需要的话,可以随时查阅JDOM的在线文档: http://www.jdom.org/docs/apidocs/index.html 。当然你可以在你需要的地方添加、删除元素操作,还记得上面的创建XML的方法吗?呵呵~~~

学习新东东还是从实例学起最为快捷,下面简单举个例子,就以上面的XML样本代码来学习 JDOM的XML解析。本例中读取了样本XML文件里一些属性和content,最后我们还在contact元素里插入了一个新元素 wanghua@cyberobject.com " />。尽管我们实现了对于XML的基本操作,细心的朋友可能会

有疑问:如果XML文档的层次稍微复杂一些,如果嵌套多达几十上百层的话(开个玩笑),如果靠这样从根元素一级一级地通过getChild("childname")来访问子元素的话,将会非常痛苦!是的,的确是这样,但是我们有另一个有力的工具 XPath,为什么不用呢?这是后话!先卖个关子(手敲累啦,下回吧,呵呵)。

/*

* Created on 2004-8-21

*

* TODO To change the template for this generated file go to

* Window - Preferences - Java - Code Style - Code Templates

*/

package com.cyberobject.study;

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.input.SAXBuilder;

import org.jdom.output.Format;

import org.jdom.output.XMLOutputter;

/**

* @author kingwong

*

* TODO To change the template for this generated type comment go to

* Window - Preferences - Java - Code Style - Code Templates

*/

public class TestJDOM2 {

public static void main(String[] args){

SAXBuilder sb = new SAXBuilder();

try

{

Document doc = sb.build("myFile.xml");

Element root = doc.getRootElement();

String str1 = root.getAttributeValue("comment");

System.out.println("Root Element's comment attribute is : " + str1);

String str2 = root.getChild("sex").getAttributeValue("value");

System.out.println("sex Element's value attribute is : " + str2);

String str3 = root.getChildText("name");

System.out.println("name Element's content is :" + str3);

String str4 = root.getChild("contact").getChildText("telephone");

System.out.println("contact Element's telephone subelement content is : " + str4 + "/n");

Element inputElement = root.getChild("contact");

inputElement.addContent(new Element("email").setAttribute("value","wanghua@cyberobject.com"));

XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());

String outStr = xmlOut.outputString(root);

System.out.println(outStr);

}

catch(Exception e)

{

e.printStackTrace();

}

}

}

原文  https://segmentfault.com/a/1190000021052390
正文到此结束
Loading...