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

下面我通过几个例子来实现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() ;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UsherYue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值