您的位置:首页 > 其它

JDOM操作XML文档高级篇XML验证,创建带名字空间的xml, xml文档的修改

2012-04-26 23:29 351 查看
下面我通过几个例子来实现JDOM来操作XML文档:
1、 xml文档的验证 DTD 我们经常使用XML来验证文档的合法性。

我们需要在xml的开头引入 <!DOCTYPE rootName SYSTEM "xxx.dtd"> 这里的PUBLIC 引入的是私有DTD也就是我们自己定义的 。我们平时使用这种即可 。

另一种是 <!DOCTYPE rootName PUBLIC ".........">这个是ISO标准的DTD ,是已经定义好了的 具体DTD 我们可以根据ISO的提供引入。

注意 <!DOCTYPE 之间不要有空格 。下面是代码 具体的xml和 dtd文件自己去定义吧。

<%@ page import="org.jdom2.*,org.jdom2.output.*,java.io.*,java.util.*" %>

<%
SAXBuilder  builder=new SAXBuilder() ;    //构建XML解析器
builder.setValidation(true) ;    //设置解析器为验证DTD
builder.build("d:/student.xml") ;  //解析XML  ,解析的时候会自动根据我们xml文件中的DOCTYPE声明的DTD文件来验证
if(builder.isValidating())  //检查解析结果 是否为true
{
out.print("验证通过!");
}

%>




2、建立一个带名字空间的xml文档 。。。



<%

Element root=new Element("root"); //定义根元素

Document myDocument=new Document(root) ; //定义文档对象

Namespace namespace1=Namespace.getNamespace("qingdaodaxue") ; //定义青岛大学名字空间

Element student1=new Element("student"); //root的子元素

Element name1=new Element("name") ; //student的子元素

Element age1=new Element("age"); //..

Element sex1=new Element("sex"); //..

Element id1=new Element("id");//..

student1.setNamespace(namespace1) ; //增加节点以及子节点到 名字空间 无前缀

name1.setNamespace(namespace1); //...

age1.setNamespace(namespace1 ) ; //同上

sex1.setNamespace(namespace1 ) ;

id1.setNamespace(namespace1) ;

name1.setText("zhangsan") ; //同上

age1.setText("15") ;

sex1.setText("man") ;

id1.setText("1");

student1.addContent(name1) ;

student1.addContent(age1) ;

student1.addContent(sex1) ;

student1.addContent(id1);

Element student2=new Element("student");

Element name2=new Element("name") ;

Element age2=new Element("age");

Element sex2=new Element("sex");

Element id2=new Element("id");

Namespace namespace2=Namespace.getNamespace("qingdaokejidaxue");

student2.setNamespace(namespace2) ;

id2.setNamespace(namespace2);

age2.setNamespace(namespace2 ) ;

sex2.setNamespace(namespace2 ) ;

name2.setNamespace(namespace2) ;

name2.setText("lisi") ;

age2.setText("16") ;

sex2.setText("woman") ;

id2.setText("2");

student2.addContent(name2) ;

student2.addContent(age2) ;

student2.addContent(sex2) ;

student2.addContent(id2);

root.addContent(student1) ;

root.addContent(student2) ;

Format format=Format.getPrettyFormat() ;

format.setEncoding("gb2312") ;

XMLOutputter output=new XMLOutputter(format);

OutputStream fos=new FileOutputStream("d:/info.xml");

output.output(myDocument, fos) ;

fos.close() ;

%>

3、在上述xml文档中查询 namespace1 也就是 qingdaodaxue的这个名字空间 的内容输出各个子节点的内容 并将name的内容改为modify。

SAXBuilder builder=new SAXBuilder() ;
Document myDocument=builder.build("d:/info.xml") ;
List list=myDocument.getRootElement().getChildren() ;
for(Object obj:list)
{
Element el=(Element)obj ;
if(el.getNamespaceURI().equals("qingdaodaxue"))
{
List tem=el.getChildren() ;
for(Object temObj:tem)
{
Element temEl=(Element)temObj ;
out.print(temEl.getName()+":"+temEl.getText()+"<br>");
if(temEl.getName().equals("name"))
{
temEl.setText("modify") ;
}
}
}
}

Format format=Format.getPrettyFormat() ;
format.setEncoding("gb2312") ;
XMLOutputter output=new XMLOutputter(format);
OutputStream fos=new FileOutputStream("d:/info.xml");
output.output(myDocument, fos) ;
fos.close() ;


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: