- 浏览: 404651 次
- 性别:
- 来自: 哈尔滨
最新评论
-
springdata_springmvc:
如何在java Web项目中开发WebService接口,地址 ...
JAVA6开发WebService (二)——JAX-WS例子 -
springdata-jpa:
如何在java Web项目中开发WebService接口,地址 ...
JAVA6开发WebService (三)——几个概念 -
springmvc-freemarker:
如何在java Web项目中开发WebService接口,地址 ...
JAVA6开发WebService (一) -
yuanfen2014:
[color=red][/color] 学习了
jdom解析xml -
di1984HIT:
我很喜欢你对设计模式的理解。
JAVA设计模式学习笔记5——模版方法模式(Template Method Pattern)
这次把代码整理了一下,打包发上来了,程序中需要用到的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 (307 KB)
- 下载次数: 347
评论
Element driverClassNameElement = (Element)XPath.selectSingleNode(rootEle, "//sys-config/jdbc-info/driver-class-name");
报错如下:
Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at org.jdom.xpath.XPath.newInstance(XPath.java:134)
at tool.file.ParseXML2JDOM.readXML(ParseXML2JDOM.java:28)
at tool.file.ParseXML2JDOM.main(ParseXML2JDOM.java:14)
Caused by: java.lang.ClassNotFoundException: org.jaxen.JaxenException
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 5 more
添加 saxpath.jar
Element driverClassNameElement = (Element)XPath.selectSingleNode(rootEle, "//sys-config/jdbc-info/driver-class-name");
报错如下:
Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at org.jdom.xpath.XPath.newInstance(XPath.java:134)
at tool.file.ParseXML2JDOM.readXML(ParseXML2JDOM.java:28)
at tool.file.ParseXML2JDOM.main(ParseXML2JDOM.java:14)
Caused by: java.lang.ClassNotFoundException: org.jaxen.JaxenException
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 5 more
对我有帮助
发表评论
-
CKFinder2.x 入门 二
2011-07-08 17:28 11287破解 CKFinder是收费的,可是我们都比较 ... -
CKFinder2.x 入门
2011-07-08 16:04 6384CKFinder是一款强大的基于浏览器的ajax文件管 ... -
jxl 操作 Excel
2011-06-09 12:06 9687java 操作 Excel 最常用的就是JXL(jav ... -
CKEditor 3.6 入门二
2011-05-23 18:11 5482配置CKEditor ... -
CKEditor 3.6 入门
2011-05-20 11:28 8267有多种方法可以将CKEditor集成到你的页面中,下面是 ... -
JAVA6开发WebService (五)—— JAXB
2011-01-25 16:55 6941JAXB(Java API for XML Bindi ... -
多线程断点续传
2011-01-12 12:20 3739以前看过一个前辈写的断点续传的文章,记得当时没看懂,就 ... -
JAVA6开发WebService (四)——SAAJ调用WebService
2010-11-13 14:32 8542前面写了个JAX-WS的小例子,看到用JAVA6开发W ... -
JAVA6开发WebService (三)——几个概念
2010-11-11 17:00 18635要了解WebService,光能写 ... -
JAVA6开发WebService (二)——JAX-WS例子
2010-11-10 17:13 19736上一篇写了个最简单的小例子,只是为了说明JAVA6开发 ... -
JAVA6开发WebService (一)
2010-11-10 12:32 36014WebService ... -
InputStream、OutputStream、String的相互转换
2010-11-09 16:37 473971、字符串转inputStream String ... -
dom4j解析xml
2010-08-20 10:52 7279dom4j和jdom都是非常优秀的xml解析工具,但现 ... -
正则表达式
2010-05-17 16:39 1774先看一个用正则表达式校验Email的js方法 func ... -
Struts 1 和 Struts 2 的线程安全
2010-03-23 16:58 5698昨天人问我Struts 2是怎么保证全局变量的线程安全 ... -
oracle 字符串函数
2010-02-22 10:59 25941.LOWER 返回字符串的小写形式;select lower ... -
JAVA 集合类
2010-01-06 16:41 1283Collection├List│├LinkedLi ... -
JAVA 线程学习笔记--同步
2009-12-30 16:37 1530为了确保可以在线程之间以受控方式共享数据,Java 语言提供了 ... -
JAVA 线程学习笔记
2009-12-30 16:26 2896创建线程有两种方法。 ... -
JAVA调用系统命令或可执行程序
2009-09-03 15:33 69640通过 java.lang.Runtime 类可以方便的 ...
相关推荐
jdom解析xml
这是我做的简单的一个在jsp中用jdom解析xml的程序。只是显示,添加等简单的功能,来学习学习jdom解析xml的程序。如果你想学习那这一定是个很好的例子
jdom解析xml文件小实例jdom解析xml文件小实例jdom解析xml文件小实例
jdom解析xml文件的源代码、jar包以及示例xml文件
基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发...
NULL 博文链接:https://xurichusheng.iteye.com/blog/1518547
一个关于用jdom解析xml,遍历xml,建立xml的简单例子.
利用JDOM解析xml文件,并根据xml中为类名,生成相应的对象。
jdom解析XML(修改为比较通用的方法) jdom解析XML(修改为比较通用的方法) jdom解析XML(修改为比较通用的方法)
Jdom操作、创建和解析XML Jdom操作、创建和解析XML Jdom操作、创建和解析XML
jdom解析XML文件and把字符串解析成XML.txt jdom解析XML文件and把字符串解析成XML.txtjdom解析XML文件and把字符串解析成XML.txt
JDOM解析XML.rar JDOM解析XML.rar JDOM解析XML.rar
Dom JDom 解析xml 文件 Dom JDom 解析xml 文件 Dom JDom 解析xml 文件 自己使用 最好不要下载
这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写...
使用JDM技术解析XML文档,在了解此程序前请到JDOM官网下载一个JDOM的类包,然后配置环境变量或者将类包连接到eclipse路径中,此程序完全可以运行,在压缩包中还包括原xml文档!!!请参考!
Java中使用jdom解析xml的案例, 以及文档说明。
xml样例 博文链接:https://jingrenlang.iteye.com/blog/356160
NULL 博文链接:https://songlitao.iteye.com/blog/2257789
jdom-1.0 jdom jdom-1.0,jdom解析xml
解析XML的好帮手,大家来看看吧,包你用得着,附带JAR包使用说明