XML解析之jdom



java中有四种分别解析xml文件。分别是,DOMSAXDOM4JJDOM四种。学习其中一种即可。其余三种解析思想差不了多少。

JDOM的主要使用方法:

1)使用JDOM首先要指定使用什么解析器。如:

        SAXBuilder builder=new SAXBuilder(false);这表示使用的是默认的解析器

2)得到Document,我们以后要进行的所有操作都是对这个Document操作的:

        Document doc=builder.build(xmlpath);

3)得到根元素:

        Element books=doc.getRootElement();

JDOM中所有的节点(DOM中的概念)都是一个org.jdom.Element类,当然他的子节点也是一个org.jdom.Element类。

4)得到元素(节点)的集合:

      List booklist=books.getChildren("book");

这表示得到“books”元素的所在名称为“book”的元素,并把这些元素都放到一个List集合中

5)轮循List集合

     for (Iterator iter = booklist.iterator(); iter.hasNext();) {

       Element book = (Element) iter.next();

   

还有一种轮循方法是:

    for(int i=0;I<booklist.size();I++){

      Element book=(Element)booklist.get(i);

    }

6)取得元素的属性:

    String email=book.getAttributeValue("email");

  取得元素book的属性名为“email”的属性值。

7)取得元素的子元素(为最低层元素)的值:

    String name=book.getChildTextTrim("name");

   注意的是,必须确定book元素的名为“name”的子元素只有一个。

8)改变元素(为最低层元素)的值:

    book.getChild("name").setText("alterrjzjh");

   这只是对Document的修改,并没有在实际的XML文档中进行修改

9)保存Document的修改到XML文件中:

   XMLOutputter outputter=new XMLOutputter();

outputter.output(doc,new FileOutputStream(xmlpath));

JDOM可以被用来解析现有的XML文档,并且十分方便。大致过程如下:

1用简单无变元构造函数构造一个org.jdom.input.SAXBuilder对象:

SAXBuilder sb = new SAXBuilder();

2用建立器的build()方法从ReaderInputStreamURLFile或包含系统ID的字

符串建立Document对象:

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

3如果读取文档遇到问题,则抛出IOException;如果建立文档遇到问题,则抛出

JDOMException

4如没有出现问题,则用Document类、Element类和其他JDOM类的方法在文档

中导航


实例

一 读取XML中的value值

test.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<Data>
    <entry name="VestVersion" value="12.15.40" />
    <entry name="GUVersion" value="12.15.20" />
    <entry name="Installzip" value="D:\a\b\conf" />
</Data>
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;

public class ReadXML {

	public static String read(String path) {
		try {
			// 创建一个SAXBuilder对象
			SAXBuilder saxBuilder = new SAXBuilder();
			Document doc = saxBuilder.build(path);
			Element root = doc.getRootElement();
			// 获取根元素下面的所有子元素(Data)
			List<Element> dataList = root.getChildren("entry");
			// 子根元素(Data)
			Element childrenRoot = null;
			List<Element> propertyList = null;
			
			// 遍历根元素的子元素集合(即遍历Data元素)
			for (int i = 0; i < dataList.size(); i++) {
				Element element = dataList.get(i);
                System.out.println(element.getAttributeValue("value")); // 
			}
			return null;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

}
测试类
import java.io.File;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String path = System.getProperty("user.dir") + File.separator + "data" + File.separator +  "test.xml";
		ReadXML.read(path);
	}

}

输出结果:

12.15.40
12.15.20
D:\a\b\conf


二 写入XML的值

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.XMLOutputter;

public class WriteXML {

	public static void write(String path, String name, String value) {
		// TODO 自动生成方法存根
		Element rootEle = new Element("Data");

		Element provinceEle = new Element("entry");
		provinceEle.setAttribute("name", name);
		provinceEle.setAttribute("value", value);

		rootEle.addContent(provinceEle);

		Document doc = new Document(rootEle);

		XMLOutputter out = new XMLOutputter();

		try {
			out.output(doc, new FileOutputStream(path));
		} catch (FileNotFoundException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}

	}

}


测试类
import java.io.File;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String path = System.getProperty("user.dir") + File.separator + "data" + File.separator +  "test.xml";
		//ReadXML.read(path);
		WriteXML.write(path, "version", "V8.10.10.00");
	}

}

运行后生成的XML文档

<?xml version="1.0" encoding="UTF-8"?>
<Data><entry name="version" value="V8.10.10.00" /></Data>



三 追加写入xml文档

public static void write(String path, String value) {
		
		try {
			SAXBuilder saxBuilder = new SAXBuilder();
			Document doc = saxBuilder.build(path);
			Element rootEle = doc.getRootElement();

			// TODO 自动生成方法存根
			Element provinceEle = new Element("property");
			provinceEle.setAttribute("value", value);

			rootEle.addContent("\n");
			rootEle.addContent("   ");
			rootEle.addContent(provinceEle);
			rootEle.addContent("\n");
			
			XMLOutputter out = new XMLOutputter();
			out.output(doc, new FileOutputStream(path));
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} finally {
		     
		}
		

	}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值