Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 365|回复: 0

[xml学习]JDom使用详解

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-10 04:05:58 | 显示全部楼层 |阅读模式
    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编码 ,此构造方法在jdom1.0中不再使用。
                  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文档的技巧在网上已经泛滥,这里就没有再列出来。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-5-8 05:32 , Processed in 0.299933 second(s), 36 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表