隨筆 - 24  文章 - 6  trackbacks - 0
          <2009年5月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          隨筆分類(23)

          積分與排名

          • 積分 - 13790
          • 排名 - 2084

          最新評論

          bromon原創 請尊重版權 

            JDom是不錯的API,算得上簡單高效,最重要是已經成為jcp的一部分,這個咱得弄弄。不www.jdom.org上寫文檔的人實在太懶,文檔出奇的少,流傳得最廣的恐怕是IBM上面的一篇《JDom讓java XML變得容易》,不過這篇文章只涉及基本的讀寫操作,遠不能勝任實際工作。花了兩天時間,把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 2005-03-28 13:17 Sometimes Java 閱讀(477) 評論(1)  編輯  收藏 所屬分類: Tech Flow

          FeedBack:
          # re: JDOM使用詳解[未登錄] 2009-05-16 23:32 求知者
          你好 我想問個問題 為什么我在編譯這段代碼的時候
          會提示java.lang.ArrayIndexOutOfBoundsException: 1
          at test.EtoX.main(EtoX.java:55)
          我建的EXCEL文件 只在第一個位置輸入了值,
          很郁悶的說~
          當EXCEL文檔為空時 XML文檔倒是可以正常的輸出~
          能幫我回答下不~  回復  更多評論
            
          主站蜘蛛池模板: 威信县| 周口市| 土默特右旗| 自贡市| 礼泉县| 仙桃市| 白山市| 昌都县| 桐庐县| 于田县| 江源县| 邵武市| 泸溪县| 泸州市| 山阳县| 视频| 且末县| 交口县| 郎溪县| 玉山县| 宝山区| 珲春市| 湖南省| 凤庆县| 连江县| 五大连池市| 扶余县| 双柏县| 农安县| 台北市| 阿坝县| 舒城县| 盐边县| 锡林浩特市| 博湖县| 昆山市| 寿光市| 攀枝花市| 麻阳| 长沙市| 永寿县|