HelloWorld 善戰(zhàn)者,求之于勢,不責于人;故能擇人而任勢。

          知止而后有定,定而后能靜,靜而后能安,安而后能慮,慮而后能得。物有本末,事有終始。知所先后,則近道矣。

            BlogJava :: 首頁 ::  :: 聯(lián)系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 40 評論 :: 0 Trackbacks
          轉(zhuǎn)自http://hi.baidu.com/secbug/blog/item/9f8bdc515b7de7561038c20b.html
          JDom是不錯的API,算得上簡單高效,最重要是已經(jīng)成為jcp的一部分,這個咱得弄弄。不過www.jdom.org上寫文檔的人實在太懶,文檔出奇的少,流傳得最廣的恐怕是IBM上面的一篇《JDom讓java XML變得容易》,不過這篇文章只涉及基本的讀寫操作,遠不能勝任實際工作。花了兩天時間,把JDom的基本操作整理出來了,涵蓋了大部分的操作:元素、屬性、命名空間、PI、DTD、Schema,應付一般的應用沒什么問題。反正我沒有在網(wǎng)上見到更加詳盡的版本,你見過的話,請留下連接。暫時來不及編寫詳細的說明,先帖幾段程序,對有經(jīng)驗的Java開發(fā)者來說,已經(jīng)足夠了。程序都已經(jīng)經(jīng)過了實際的測試,我使用的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("第二個元素");

          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驗證的:


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

          }

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

          3、XML Schema驗證的:


          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);
          //導入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);
          }

          }

          }


          </script>

          posted on 2009-10-12 22:07 helloworld2008 閱讀(243) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 灵川县| 澄城县| 新郑市| 黑龙江省| 高清| 大同市| 荥阳市| 姜堰市| 衢州市| 慈溪市| 苏尼特右旗| 米林县| 铜鼓县| 乐亭县| 山阴县| 楚雄市| 宁南县| 抚顺县| 阜城县| 中宁县| 鲁山县| 格尔木市| 宝应县| 台中县| 雷州市| 彝良县| 裕民县| 河西区| 潮安县| 嘉鱼县| 利川市| 信阳市| 福贡县| 新河县| 峨边| 大足县| 连平县| 临沭县| 天台县| 黄大仙区| 岚皋县|