操作XML文件的jdom

1 篇文章 0 订阅
今天突然想起原来使用过得操作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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值