惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
I
InfoQ
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
Y
Y Combinator Blog
博客园_首页
Martin Fowler
Martin Fowler
宝玉的分享
宝玉的分享
A
About on SuperTechFans
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
C
Check Point Blog
B
Blog RSS Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Engineering at Meta
Engineering at Meta
B
Blog
爱范儿
爱范儿
Stack Overflow Blog
Stack Overflow Blog
aimingoo的专栏
aimingoo的专栏
WordPress大学
WordPress大学
F
Fortinet All Blogs
月光博客
月光博客
GbyAI
GbyAI

博客园 - CQIT-CS

关于ASP.NET2.0 WebPart两个问题的解决... - CQIT-CS - 博客园 批处理命令简要教程 Dom4j 使用简介 面向服务的体系结构概述:第四部分(转) 面向服务的体系结构概述:第三部分(转) 面向服务的体系结构概述:第二部分(转) 面向服务的体系结构概述:第一部分(转) 用JAVASCRIPT实现JAVA的HashMap类... - CQIT-CS - 博客园 ASP.NET开启服务器端调试的方法... [原创]ECLIPSE环境下利用ANT进行JSF开发入门(三) [原创]ECLIPSE环境下利用ANT进行JSF开发入门(二) [原创]ECLIPSE环境下利用ANT进行JSF开发入门(一) 对象克隆... JAR详解 垂直滚动的DIV(含鼠标事件) 线程正在被中止问题的原因及解决 下载电子书的网址收集... CSS中expression的使用方法... 部署一个BIRT报告到你的应用服务器(转自ECLIPSE中国社区)
JDom使用详解
CQIT-CS · 2006-10-21 · via 博客园 - CQIT-CS

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

1、创建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);
}

}

}