lnj-lin

          JDom使用詳解(轉)

          (bromon原創?版權所有?轉)

          ?JDom是不錯的API,算得上簡單高效,最重要是已經成為jcp的一部分,這個咱得
          弄弄。不www.jdom.org上寫文檔的人實在太懶,文檔出奇的少,流傳得最廣的恐怕是IBM上面的一篇《JDom讓java?XML變得容易》,不
          過這篇文章只涉及基本的讀寫操作,遠不能勝任實際工作?;藘商鞎r間,把JDom的基本操作整理出來了,涵蓋了大部分的操作:元素、屬性、命名空間、
          PI、DTD、Schema,應付一般的應用沒什么問題。反正我沒有在網上見到更加詳盡的版本,你見過的話,請留下連接。暫時來不及編寫詳細的說明,先帖
          幾段程序,對有經驗的Java開發者來說,已經足夠了。程序都已經經過了實際的測試,我使用的JDom是0.9版。

          ?1、創建XML文檔:
          ?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="text/xsl"?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("第二個元素");

          ????el1.addContent(text1);
          ?????????????el1.addContent(em);
          ?????????????
          ?????????????Element?el2?=?new?Element("元素三").addContent("第三個元素");

          ?????????????root.addContent(el1);
          ?????????????root.addContent(el2);
          ?????????????
          ?????????????//縮進四個空格,自動換行,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驗證的:
          ?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();
          ??}
          ??
          ?}

          ?
          需要說明的是,這個程序沒有指明使用哪個DTD文件。DTD文件的位置是在XML中指定的,而且DTD不支持命名空間,一個XML只能引用一個DTD,所
          以程序直接讀取XML中指定的DTD,程序本身不用指定。不過這樣一來,好象就只能使用外部式的DTD引用方式了?高人指點。

          ?3、XML?Schema驗證的:
          ?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);
          ????//導入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("驗證失敗:"+e);
          ???}
          ???
          ??}
          ??
          ?}

          ?上面的程序就指出了要引入的XML?Schema文件的位置。

          ?系統默認輸出是UTF-8,這有可能導致出現亂碼。

          ?讀XML文檔的技巧在網上已經泛濫,這里就沒有再列出來。

          posted on 2006-09-17 20:12 失控的陽光 閱讀(112) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 宁强县| 天镇县| 稻城县| 固安县| 凤冈县| 花垣县| 区。| 溧阳市| 增城市| 织金县| 昌宁县| 山西省| 沁水县| 静乐县| 鸡东县| 金华市| 汤原县| 温泉县| 青海省| 塔城市| 平远县| 临朐县| 化隆| 毕节市| 浦江县| 仁怀市| 云和县| 昭通市| 阳泉市| 乐山市| 深州市| 连云港市| 绥江县| 宣化县| 石台县| 鹿邑县| 左贡县| 汉源县| 永川市| 南岸区| 中山市|