jdom解析xml
这次把代码整理了一下,打包发上来了,程序中需要用到的jar包也一起打在里面了,有兴趣的朋友可以解压后直接导入的eclipse里运行!
xml是一种广为使用的可扩展标记语言,java中解析xml的方式有很多,最常用的像jdom、dom4j、sax等等。前两天刚好有个程序需要解析xml,就学了下jdom,写了个小例子,这里做个学习笔记。
要使用jdom解析xml文件,需要下载jdom的包,我使用的是jdom-1.1。解压之后,将lib文件夹下的.jar文件以及build文件夹下的jdom.jar拷贝到工程文件夹下,然后就可以使用jdom操作xml文件了。
一、读取xml文件
假设有这样一个xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<sys-config>
<jdbc-info>
<driver-class-name>oracle.jdbc.driver.OracleDriver</driver-class-name>
<url>jdbc:oracle:thin:@localhost:1521:database</url>
<user-name>why</user-name>
<password>why</password>
</jdbc-info>
<provinces-info>
<province id="hlj" name="黑龙江">
<city id="harb">哈尔滨</city>
<city id="nj">嫩江</city>
</province>
<province id="jl" name="吉林"></province>
</provinces-info>
</sys-config>
首先,用 org.jdom.input.SAXBuilder 这个类取得要操作的xml文件,会返回一个 org.jdom.Document 对象,这里需要做一下异常处理。然后,取得这个xml文件的根节点,org.jdom.Element 代表xml文件中的一个节点,取得跟节点后,便可以读取xml文件中的信息。利用 org.jdom.xpath.XPath 可以取得xml中的任意制定的节点中的信息。
例如,要取得上面文件中的 <jdbc-info> 下的 <driver-class-name> 中的内容,先取得这个节点Element driverClassNameElement = (Element)XPath.selectSingleNode(rootEle, "//sys-config/jdbc-info/driver-class-name"),注意,根节点前要使用两个 "/" ,然后,用 driverClassNameElement.getText() 便可以取得这个节点下的信息。
如果一个节点下有多个名称相同的子节点,可以用XPath.selectNodes()方法取得多个子节点的List,遍历这个List就可以操作各个子节点的内容了。
下面是我写的读取上面xml文件的例子,比起文字描述更直观一些吧:
package com.why.jdom; import java.io.IOException;
import java.util.Iterator;
import java.util.List; import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException; public class ReadXML { /**
* @param args
*/
public static void main(String[] args) {
SAXBuilder sax = new SAXBuilder();
try {
Document doc = sax.build("src/config.xml");
Element rootEle = doc.getRootElement();
Element driverClassNameElement = (Element)XPath.selectSingleNode(rootEle, "//sys-config/jdbc-info/driver-class-name");
String driverClassName = driverClassNameElement.getText();
System.out.println("driverClassName = " + driverClassName); List provinceList = XPath.selectNodes(rootEle, "//sys-config/provinces-info/province");
for(Iterator it = provinceList.iterator();it.hasNext();){
Element provinceEle = (Element)it.next();
String proId = provinceEle.getAttributeValue("id");
String proName = provinceEle.getAttributeValue("name"); System.out.println("provinceId = " + proId + " provinceName = " + proName); List cityEleList = (List)provinceEle.getChildren("city"); for(Iterator cityIt = cityEleList.iterator();cityIt.hasNext();){
Element cityEle = (Element)cityIt.next();
String cityId = cityEle.getAttributeValue("id");
String cityName = cityEle.getText(); System.out.println(" cityId = " + cityId + " cityName = " + cityName);
}
}
} catch (JDOMException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} } }
二、写xml文件
写xml文件与读取xml文件的操作类似,利用 org.jdom.output.XMLOutputter 就可以将处理好的xml输出到文件了。可以设置文件的编码方式,不过一般使用UTF-8就可以了。代码如下:
package com.why.jdom; import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter; public class WriteXML { /**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
Element rootEle = new Element("sys-config");
Element provincesEle = new Element("provinces-info"); Element provinceEle = new Element("province");
provinceEle.setAttribute("id","hlj");
provinceEle.setAttribute("name","黑龙江省"); Element cityEle1 = new Element("city");
cityEle1.setAttribute("id","harb");
cityEle1.addContent("哈尔滨"); Element cityEle2 = new Element("city");
cityEle2.setAttribute("id","nj");
cityEle2.addContent("嫩江"); provinceEle.addContent(cityEle1);
provinceEle.addContent(cityEle2);
provincesEle.addContent(provinceEle);
rootEle.addContent(provincesEle); Document doc = new Document(rootEle); XMLOutputter out = new XMLOutputter(); // out.setFormat(Format.getCompactFormat().setEncoding("GBK"));//设置文件编码,默认为UTF-8
String xmlStr = out.outputString(doc);
System.out.println(xmlStr); try {
out.output(doc, new FileOutputStream("c:/test.xml"));
} catch (FileNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} } }
TestJdom.rar 转:http://wuhongyu.iteye.com/blog/361842
jdom解析xml的更多相关文章
- Javaweb学习笔记——使用Jdom解析xml
一.前言 Jdom是什么? Jdom是一个开源项目,基于树形结构,利用纯java的技术对XML文档实现解析,生成,序列化以及多种操作.它是直接为java编程服务,利用java语言的特性(方法重载,集合 ...
- 简单使用JDOM解析XML
原文:http://liuwentao.iteye.com/blog/59978 使用JDOM解析XML一.前言JDOM是Breet Mclaughlin和Jason Hunter两大Java高手的创 ...
- Java jdom解析xml文件带冒号的属性
Java jdom解析xml文件带冒号的属性 转载请标明出处: https://dujinyang.blog.csdn.net/article/details/99644824 本文出自:[奥特曼超人 ...
- 使用JDom解析XML文档模拟Spring的配置文件解析
在J2EE项目中可能会涉及到一些框架的使用,最近接触到了SSH,拿Spring来说配置文件的使用是相当重要的,Spring的配置文件是一个xml文件,Spring是如何读取到配置文件并进行依赖注入的呢 ...
- 使用JDOM解析xml文档
一.使用JDOOM解析xml文档 准备工作 1.下载JDOM.jar 包 解析代码如下 import org.jdom2.Attribute; import org.jdom2.Document; i ...
- Java中Jdom解析XML
JDOM与DOM类似,也是一组用于解析XML的API,它本身不是一个解析器,默认的它内置了Apache的Xerces解析器:JDOM与DOM不同的是,DOM是跨语言的一套API,Java世界中有很多D ...
- 第三方工具Jdom解析XML
需要导入的jar包:jdom-2.0.6.jar package com.huawei.xml; import java.io.File;import java.io.FileOutputStream ...
- Java&Xml教程(六)使用JDOM解析XML文件
JDOM 提供了非常优秀的Java XML API来更方便的读取.修改.生成XML文档.JDOM还提供了包装类供用户从SAX.DOM.STAX事件解析.STAX流解析中选择具体的实现. 在本教程中,我 ...
- java解析xml(使用jdom解析xml)
第一步: 装入jar包:下载地址:http://www.jdom.org/downloads/index.html 第二步: 在项目中加入jar包 jdom-2.06.jar 放入lib中 第三步: ...
随机推荐
- 学习DRF之前须知知识点
在学习DRF之前~我们要先复习一些知识点~~ FBV和CBV 学习Django的时候~我们已经学习过了CBV以及FBV~~我们来复习一下~~ 什么是FBV和CBV呢~~ FBV 基于函数的视图 CBV ...
- 第九章 词典 (c)散列:散列函数
- Ubuntu 14.04 LTS 安装Docker(转)
转自:https://www.cnblogs.com/leolztang/p/5097278.html Docker官方是有很详细的安装文档(https://docs.docker.com/engin ...
- Django之crm
crm注册 crm注册Form from django import forms from crm import models from django.core.exceptions import V ...
- 牛客网Wannafly挑战赛15 B车辆安排(模拟)AND C 出队(规律)
传送门 :B题:点我 C题: 点我 题目描述 有n个队伍,每个队伍的人数小于等于5,每辆车最多坐5个人,要求一个队伍的人都在一辆车上,求最少的车数 输入描述: 第一行n第二行n个数,表示每个队伍的人数 ...
- Visual C++ 6.0 创建C语言程序
1 文件-->新建-->”文件“选项卡-->C++ Source File. 2 输入文件名.选择文件位置,点击确定,弹出编辑器窗口. 3 在编辑器窗口中,输入C程序代码,然后保存. ...
- stm32 启动文件 C和汇编交叉嵌入
在嵌入式系统开发中,目前使用的主要编程语言是C和汇编,C++已经有相应的编译器,但是现在使用还是比较少的.在稍大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C编写的,主要是因为C语言的结构比较 ...
- ThreaLocal
ThreadLocal概念:线程局部变量,是一种多线程间并发访问变量的解决方案.与其synchronized等加锁的方式不同,ThreadLocal完全不提供锁,而使用以空间换时间的手段,为每个线程提 ...
- f5时间设置
方法一:NTP(推荐) 注:修改ntp server后大约需要10分钟左右才能同步成功. 查看ntp状态: 方法二:手动修改
- 管道分隔符Split
string[] areaID = area1Id.Split(new char[] { ',' });