JDOM操作XML文档高级篇XML验证,创建带名字空间的xml, xml文档的修改
1、 xml文档的验证 DTD 我们经常使用XML来验证文档的合法性。
我们需要在xml的开头引入 <!DOCTYPE rootNameSYSTEM "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() ;
上一篇: Mysql随笔(三)常用函数
下一篇: 学习笔记 -- MySQL常用函数(三)