<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    常用鏈接

    隨筆分類(23)

    積分與排名

    • 積分 - 13833
    • 排名 - 2083

    最新評(píng)論

    bromon原創(chuàng) 請(qǐng)尊重版權(quán) 

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

     1、創(chuàng)建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("第二個(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)證的:

    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();
      }

      
     }

     

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

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

    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);
       }

       
      }

      
     }

     

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

     系統(tǒng)默認(rèn)輸出是UTF-8,這有可能導(dǎo)致出現(xiàn)亂碼。

     讀XML文檔的技巧在網(wǎng)上已經(jīng)泛濫,這里就沒有再列出來。

    posted on 2005-03-28 13:17 Sometimes Java 閱讀(479) 評(píng)論(1)  編輯  收藏 所屬分類: Tech Flow

    FeedBack:
    # re: JDOM使用詳解[未登錄] 2009-05-16 23:32 求知者
    你好 我想問個(gè)問題 為什么我在編譯這段代碼的時(shí)候
    會(huì)提示java.lang.ArrayIndexOutOfBoundsException: 1
    at test.EtoX.main(EtoX.java:55)
    我建的EXCEL文件 只在第一個(gè)位置輸入了值,
    很郁悶的說~
    當(dāng)EXCEL文檔為空時(shí) XML文檔倒是可以正常的輸出~
    能幫我回答下不~  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 亚洲电影一区二区三区| 免费一级毛片不卡不收费| 亚洲国模精品一区| 久久亚洲精品无码gv| 成全影视免费观看大全二| 亚洲精品视频观看| 1000部拍拍拍18勿入免费视频下载 | 久久夜色精品国产噜噜亚洲a| 99久久免费精品高清特色大片| 亚洲VA成无码人在线观看天堂| 丰满人妻一区二区三区免费视频| 亚洲午夜爱爱香蕉片| 久久久精品视频免费观看 | 欧洲亚洲综合一区二区三区| 日韩一区二区三区免费体验| 亚洲精品天堂成人片AV在线播放| 在线免费一区二区| 亚洲AV日韩AV无码污污网站| 亚洲AV综合色区无码一区| 麻豆国产VA免费精品高清在线| 亚洲av无码成人精品区一本二本| 国产A在亚洲线播放| 99在线免费观看视频| 美女被艹免费视频| 亚洲精品无码不卡在线播放HE| 99xxoo视频在线永久免费观看| 美女免费视频一区二区| 国产成+人+综合+亚洲专| 免费黄色一级毛片| 无码人妻丰满熟妇区免费| 中文字幕亚洲综合小综合在线| 亚洲中文字幕不卡无码| 3d成人免费动漫在线观看| 一级特级女人18毛片免费视频| 久久亚洲一区二区| 精品亚洲一区二区三区在线播放| 久艹视频在线免费观看| 亚洲愉拍一区二区三区| 中文字幕不卡亚洲| 免费看国产曰批40分钟| 一区二区三区四区免费视频|