jdom操作xml

JDOM是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初,JDOM作为一个开放源代码项目正式开始研发。JDOM是一种解析XML的Java工具包。

JDOM的二进制版本下载: http://www.jdom.org/downloads/index.html

把解压后的jdom.jar文件加到项目的类路径中,另外便于调试,还要下载它的源代码。

一、解析XML
要解析的XML文件:
<? xml version = " 1.0 "  encoding = " gb2312 " ?>
< books >
   
< book email = " zhoujunhui " >
     
< name > rjzjh </ name >
     
< price > 60.0 </ price >
  
</ book >
</ books >


解析XML的java文件:
 1  package  com;
 2 
 3  import  java.io.IOException;
 4  import  java.util. * ;
 5  import  org.jdom. * ;
 6  import  org.jdom.input.SAXBuilder; 
 7 
 8  public   class  Test {
 9 
10       /**
11       *  @param  args
12        */
13       public   static   void  main(String[] args) {
14          SAXBuilder sb = new  SAXBuilder(false );
15          Document doc  =   null ;
16           try  {
17              doc  =  sb.build( " sample.xml " );
18          }  catch  (JDOMException e) {
19              e.printStackTrace();
20          }  catch  (IOException e) {
21              e.printStackTrace();
22          } 
23          Element root = doc.getRootElement();  // 获取根元素
24          List list = root.getChildren( " book " ); // 取名字为book的所有元素
25           for ( int  i = 0 ;i < list.size();i ++ ){
26              Element element = (Element)list.get(i);
27              String email = element.getAttributeValue( " email " );
28              String name = element.getChildText( " name " );
29              String price = element.getChildText( " price " );
30              System.out.println( " name: " + name);
31              System.out.println( " price: " + price);
32              System.out.println( " email: " + email);
33          }
34      }
35  }
36 
37 

解释代码
引用的类:
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
//下面是引用到JDOM中的类
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
(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));

我们先要有一个XMLOutputter类,再把已经修改了的Document保存进XML文档中。
到此。用JDOM解析和处理XML文档讲解完了,麻雀虽小,五脏俱全。现在已对JDOM有个整体上的概念了吧。

二、生成XML:
java文件:
 1  package  com;
 2 
 3  import  java.io.FileWriter;
 4  import  java.io.IOException;
 5  import  java.util. * ;
 6  import  org.jdom. * ;
 7  import  org.jdom.input.SAXBuilder; 
 8  import  org.jdom.output.XMLOutputter;
 9 
10  public   class  Test {
11 
12       /**
13       *  @param  args
14        */
15       public   static   void  main(String[] args) {
16           // 第一步,创建根元素 
17 
18          Element carElement  =   new  Element( " car " ); 
19          Document myDocument  =   new  Document(carElement); 
20 
21           // 因为一个 XML 文档必须一直有一个唯一的根元素,所以 Document 将 Element 放在它的构造器中。 
22 
23           // 第二步,添加一个 Attribute 
24 
25          carElement.setAttribute( new  Attribute( " vin " " 123fhg5869705iop90 " )); 
26 
27           // 第三步,添加其它元素 
28 
29          carElement.addContent( new  Element( " make " ).addContent( " Toyota " )); 
30 
31          carElement.addContent( new  Element( " model " ).addContent( " Celica " )); 
32          carElement.addContent( new  Element( " year " ).addContent( " 1997 " )); 
33          carElement.addContent( new  Element( " color " ).addContent( " green " )); 
34          carElement.addContent( new  Element( " license " ).addContent( " 1ABC234 " ).setAttribute( " state " " CA " )); 
35 
36           // 第四步,添加一条注释 
37 
38          carElement.addContent( new  Comment( " Description of a car " )); 
39 
40           // 第五步,读一个子元素 
41 
42          Element yearElement  =  carElement.getChild( " year " ); 
43 
44           // 第六步,删除子元素 
45 
46           boolean  removed  =  carElement.removeChild( " year " ); 
47 
48           // 第七步,存盘 
49          XMLOutputter outputter  =   new  XMLOutputter(); // 用于输出jdom 文档
50          FileWriter writer;
51           try  {
52              writer  =   new  FileWriter( " myFile.xml " );
53              outputter.output(myDocument, writer); 
54              writer.close();
55          }  catch  (IOException e) {
56               //  TODO 自动生成 catch 块
57              e.printStackTrace();
58          } 
59          
60 
61      }
62  }
63 
64 

生成的XML:
<? xml version = " 1.0 "  encoding = " UTF-8 " ?>
< car vin = " 123fhg5869705iop90 " >
< make > Toyota </ make >
< model > Celica </ model >
< color > green </ color >
< license state = " CA " > 1ABC234 </ license >
<!-- Description of a car -->
</ car >
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值