分享

JDom使用详解

 smoking_boy 2005-09-17
JDom是不错的API,算得上简单高效,最重要是已经成为jcp的一部分,这个咱得弄弄。不过www.jdom.org上写文档的人实在太懒,文档出奇的少,流传得最广的恐怕是IBM上面的一篇《JDom让java XML变得容易》,不过这篇文章只涉及基本的读写操作,远不能胜任实际工作。花了两天时间,把JDom的基本操作整理出来了,涵盖了大部分的操作:元素、属性、命名空间、PI、DTD、Schema,应付一般的应用没什么问题。反正我没有在网上见到更加详尽的版本,你见过的话,请留下连接。暂时来不及编写详细的说明,先帖几段程序,对有经验的Java开发者来说,已经足够了。程序都已经经过了实际的测试,我使用的JDom是0.9版。

 1、创建XML文档:
 
  1.  package org.bromon.jdom.example;
  2.  import java.io.*;
  3.  import org.jdom.*;
  4.  import org.jdom.input.*;
  5.  import org.jdom.output.*;
  6.  public class CreateXML
  7.  {
  8.   public void Create()
  9.   {
  10.    try
  11.    {
  12.     Document doc = new Document();   
  13.     ProcessingInstruction pi=new ProcessingInstruction("xml-stylesheet","type="textxsl" href="test.xsl"");
  14.     doc.addContent(pi);
  15.     
  16.     Namespace ns = Namespace.getNamespace("http://www." );
  17.     Namespace ns2 = Namespace.getNamespace("other""http://www." );
  18.     Element root = new Element("根元素", ns);
  19.     root.addNamespaceDeclaration(ns2);
  20.     doc.setRootElement(root);
  21.     Element el1 = new Element("元素一");
  22.     el1.setAttribute("属性""属性一");
  23.     
  24.     Text text1=new Text("元素值");
  25.              Element em = new Element("元素二").addContent("第二个元素");
  26.     el1.addContent(text1);
  27.              el1.addContent(em);
  28.              
  29.              Element el2 = new Element("元素三").addContent("第三个元素");
  30.              root.addContent(el1);
  31.              root.addContent(el2);
  32.              
  33.              //缩进四个空格,自动换行,gb2312编码
  34.              XMLOutputter outputter = new XMLOutputter("  "true,"GB2312");
  35.              outputter.output(doc, new FileWriter("test.xml"));
  36.          }catch(Exception e)
  37.          {
  38.           System.out.println(e);
  39.          }
  40.      }
  41.      
  42.      public static void main(String args[])
  43.      {
  44.       new CreateXML().Create();
  45.      }
  46.      
  47.  }

 2、DTD验证的:
 
  1.  package org.bromon.jdom.example;
  2.  import java.io.*;
  3.  import org.jdom.*;
  4.  import org.jdom.input.*;
  5.  import org.jdom.output.*;
  6.  public class XMLWithDTD
  7.  {
  8.   public void validate()
  9.   {
  10.    try
  11.    {
  12.     SAXBuilder builder = new SAXBuilder(true);
  13.     builder.setFeature("http:///sax/features/validation";,true); 
  14.     Document doc = builder.build(new FileReader("author.xml"));
  15.     
  16.     System.out.println("搞掂");
  17.     XMLOutputter outputter = new XMLOutputter();
  18.     outputter.output(doc, System.out);
  19.    }catch(Exception e)
  20.    {
  21.     System.out.println(e);
  22.    }
  23.    
  24.   }
  25.   public static void main(String args[])
  26.   {
  27.    new XMLWithDTD().validate();
  28.   }
  29.   
  30.  }

 需要说明的是,这个程序没有指明使用哪个DTD文件。DTD文件的位置是在XML中指定的,而且DTD不支持命名空间,一个XML只能引用一个DTD,所以程序直接读取XML中指定的DTD,程序本身不用指定。不过这样一来,好象就只能使用外部式的DTD引用方式了?高人指点。

 3、XML Schema验证的:
 
  1.  package org.bromon.jdom.example;
  2.  import java.io.*;
  3.  import org.jdom.*;
  4.  import org.jdom.input.*;
  5.  import org.jdom.output.*;
  6.  public class XMLWithSchema
  7.  {
  8.   String xml="test.xml";
  9.   String schema="test-schema.xml";
  10.   public void validate()
  11.   {
  12.    try
  13.    {
  14.     SAXBuilder builder = new SAXBuilder(true);
  15.     //指定约束方式为XML schema
  16.     builder.setFeature("http:///xml/features/validation/schema";,  true);
  17.     //导入schema文件
  18.     builder.setProperty("http:///xml/properties/schema/external-noNamespaceSchemaLocation";,schema); 
  19.     Document doc = builder.build(new FileReader(xml));
  20.     
  21.     System.out.println("搞掂");
  22.     XMLOutputter outputter = new XMLOutputter();
  23.     outputter.output(doc, System.out);
  24.    }catch(Exception e)
  25.    {
  26.     System.out.println("验证失败:"+e);
  27.    }
  28.    
  29.   }
  30.   
  31.  }

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

 系统默认输出是UTF-8,这有可能导致出现乱码。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多