加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

操作XML文件的jdom

发布时间:2020-12-16 06:39:19 所属栏目:百科 来源:网络整理
导读:今天突然想起原来使用过得操作XML文件的jdom技术,看到网上有不错的博客,转载一下,以后就可以常常看看 JDOM的主要使用方法: (1)使用JDOM首先要指定使用什么解析器。如: SAXBuilder builder=new SAXBuilder(false); 这表示使用的是默认的解析器 (2)得
今天突然想起原来使用过得操作XML文件的jdom技术,看到网上有不错的博客,转载一下,以后就可以常常看看


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()方法从Reader,InputStream,URL,File 或包含系统ID 的字
符串建立Document 对象:
Document myDocument = sb.build(/some/directory/myFile.xml);
(3) 如果读取文档遇到问题,则抛出IOException;如果建立文档遇到问题,则抛出
JDOMException。
(4) 如没有出现问题,则用Document 类、Element 类和其他JDOM 类的方法在文档
中导航。

实例: 先创建一个 xml 文件,并把它放置到项目的根目录下: prop.xml <?xml version="1.0" encoding="UTF-8"?> <prop> <mess> <property name="sSize" value="52"></property> <property name="cSize" value="23"></property> <property name="pSize" value="15"></property> <property name="aSize" value="25"></property> </mess> </prop> 下面要实现的是通过不同的 name 属性值来获得其对应的 vaule 的属性值,这里是用 jdom 来解析XML数据,所以需要导入 jdom 所需的jar包,我这里用的是 jdom-2.0.0.jar XmlDom.java package com.fancy.util; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; /** * ----------------------------------------- * @文件: XmlDom.java * @作者: fancy * @邮箱: fancyz@yeah.net * @时间: 2012-6-9 * @描述: JDOM 解析XML资源 * ----------------------------------------- */ public class XmlDom { /** * @方法名: obtainValue * @参数名:@param name:属性名 * @参数名:@return :返回与属性名一致的属性值 * @描述语: 解析XML数据,返回与属性名一致的属性值,查找不到匹配属性名则返回null */ public static String obtainValue(String name){ try { //创建一个SAXBuilder对象 SAXBuilder saxBuilder = new SAXBuilder(); //读取prop.xml资源 Document doc = saxBuilder.build("prop.xml"); //获取根元素(prop) Element root = doc.getRootElement(); //获取根元素下面的所有子元素(mess) List<Element> messList = root.getChildren("mess"); //子根元素(mess) Element childrenRoot = null; //property元素集合 List<Element> propertyList = null; //遍历根元素的子元素集合(即遍历mess元素) for(int i = 0; i < messList.size(); i++){ //将根元素prop下的mess子元素作为一个新的子根元素 childrenRoot = messList.get(i); //获取子根元素mess下的所有property子元素 propertyList = childrenRoot.getChildren("property"); //遍历子根元素的子元素集合(即遍历property元素) for(int j = 0; j < propertyList.size(); j++){ //获取property元素 Element element = propertyList.get(j); //element.getAttributeValue("name"):获取property中name属性的值 if(element.getAttributeValue("name").equals(name)){ //如果name的值一致 return element.getAttributeValue("value"); //取得name对应的value属性值 } } } //遍历完没有查找到结果返回null return null; } catch (Exception e) {e.printStackTrace();} return null; } } 最后来创建一个简单的测试类即可 package test; import com.fancy.util.XmlDom; /** * ----------------------------------------- * @文件: Test.java * @作者: fancy * @邮箱: fancyz@yeah.net * @时间: 2012-6-9 * @描述: 测试类 * ----------------------------------------- */ public class Test { public static void main(String[] args) { System.out.println(XmlDom.obtainValue("pSize")); System.out.println(XmlDom.obtainValue("PSize")); } } 转自: http://www.cnblogs.com/fancyzero/archive/2012/06/09/jdom.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读