JDom使用詳解

          JDom是不錯(cuò)的API,算得上簡(jiǎn)單高效,最重要是已經(jīng)成為jcp的一部分,這個(gè)咱得弄弄。不過(guò)www.jdom.org上寫(xiě)文檔的人實(shí)在太懶,文檔出奇的少,流傳得最廣的恐怕是IBM上面的一篇《JDom讓java XML變得容易》,不過(guò)這篇文章只涉及基本的讀寫(xiě)操作,遠(yuǎn)不能勝任實(shí)際工作。花了兩天時(shí)間,把JDom的基本操作整理出來(lái)了,涵蓋了大部分的操作:元素、屬性、命名空間、PI、DTD、Schema,應(yīng)付一般的應(yīng)用沒(méi)什么問(wèn)題。反正我沒(méi)有在網(wǎng)上見(jiàn)到更加詳盡的版本,你見(jiàn)過(guò)的話,請(qǐng)留下連接。暫時(shí)來(lái)不及編寫(xiě)詳細(xì)的說(shuō)明,先帖幾段程序,對(duì)有經(jīng)驗(yàn)的Java開(kāi)發(fā)者來(lái)說(shuō),已經(jīng)足夠了。程序都已經(jīng)經(jīng)過(guò)了實(shí)際的測(cè)試,我使用的JDom是0.9版。

          1、創(chuàng)建XML文檔:


          package org.bromon.jdom.example; 
          import java.io.*
          import org.jdom.*
          import org.jdom.input.*
          import org.jdom.output.*

          public class CreateXML 

          public void Create() 

          try 

          Document doc 
          = new Document(); 
          ProcessingInstruction pi
          =new ProcessingInstruction("xml-stylesheet","type="textxsl" href="test.xsl""); 
          doc.addContent(pi); 

          Namespace ns 
          = Namespace.getNamespace("http://www.bromon.org" ); 
          Namespace ns2 
          = Namespace.getNamespace("other""http://www.w3c.org" ); 

          Element root 
          = new Element("根元素", ns); 
          root.addNamespaceDeclaration(ns2); 
          doc.setRootElement(root); 
          Element el1 
          = new Element("元素一"); 
          el1.setAttribute(
          "屬性""屬性一"); 

          Text text1
          =new Text("元素值"); 
          Element em 
          = new Element("元素二").addContent("第二個(gè)元素"); 

          el1.addContent(text1); 
          el1.addContent(em); 

          Element el2 
          = new Element("元素三").addContent("第三個(gè)元素"); 

          root.addContent(el1); 
          root.addContent(el2); 

          //縮進(jìn)四個(gè)空格,自動(dòng)換行,gb2312編碼 
          XMLOutputter outputter = new XMLOutputter(" "true,"GB2312"); 
          outputter.output(doc, 
          new FileWriter("test.xml")); 
          }
          catch(Exception e) 

          System.out.println(e); 
          }
           
          }
           

          public static void main(String args[]) 

          new CreateXML().Create(); 
          }
           

          }
           

          2、DTD驗(yàn)證的:


          package org.bromon.jdom.example; 
          import java.io.*
          import org.jdom.*
          import org.jdom.input.*
          import org.jdom.output.*

          public class XMLWithDTD 

          public void validate() 

          try 

          SAXBuilder builder 
          = new SAXBuilder(true); 
          builder.setFeature(
          "http://xml.org/sax/features/validation";,true); 
          Document doc 
          = builder.build(new FileReader("author.xml")); 

          System.out.println(
          "搞掂"); 
          XMLOutputter outputter 
          = new XMLOutputter(); 
          outputter.output(doc, System.out); 
          }
          catch(Exception e) 

          System.out.println(e); 
          }
           

          }
           
          public static void main(String args[]) 

          new XMLWithDTD().validate(); 
          }
           

          }
           

          需要說(shuō)明的是,這個(gè)程序沒(méi)有指明使用哪個(gè)DTD文件。DTD文件的位置是在XML中指定的,而且DTD不支持命名空間,一個(gè)XML只能引用一個(gè)DTD,所以程序直接讀取XML中指定的DTD,程序本身不用指定。不過(guò)這樣一來(lái),好象就只能使用外部式的DTD引用方式了?高人指點(diǎn)。

          3、XML Schema驗(yàn)證的:


          package org.bromon.jdom.example; 
          import java.io.*
          import org.jdom.*
          import org.jdom.input.*
          import org.jdom.output.*

          public class XMLWithSchema 

          String xml
          ="test.xml"
          String schema
          ="test-schema.xml"
          public void validate() 

          try 

          SAXBuilder builder 
          = new SAXBuilder(true); 
          //指定約束方式為XML schema 
          builder.setFeature("http://apache.org/xml/features/validation/schema";, true); 
          //導(dǎo)入schema文件 
          builder.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation";,schema); 
          Document doc 
          = builder.build(new FileReader(xml)); 

          System.out.println(
          "搞掂"); 
          XMLOutputter outputter 
          = new XMLOutputter(); 
          outputter.output(doc, System.out); 
          }
          catch(Exception e) 

          System.out.println(
          "驗(yàn)證失敗:"+e); 
          }
           

          }
           

          }



          posted on 2008-03-04 10:04 魯勝迪 閱讀(727) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2008年3月>
          2425262728291
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(4)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          新聞分類(lèi)

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 开鲁县| 达孜县| 五常市| 怀安县| 西宁市| 德江县| 耿马| 舒兰市| 潼南县| 富源县| 民权县| 广饶县| 会同县| 育儿| 大埔区| 竹北市| 泾源县| 合山市| 奉新县| 泰来县| 汉沽区| 清镇市| 周宁县| 敖汉旗| 九龙县| 苍梧县| 昌图县| 惠来县| 阿城市| 达州市| 盐山县| 鹤壁市| 丁青县| 招远市| 忻城县| 西安市| 香港| 普格县| 华池县| 鸡泽县| 岢岚县|