java解析xml:使用DOM

一.概要
 用Java解析XML文档,最常用的有两种方式:使用基于事件的XML简单API(Smiple API for XML)称为SAX和基于树和节点的文档对象模型(Document object Module)成为DOM。Sun公司提供了Java API for XML Parsing(JAXP)接口来使用SAX和DOM,通过JAXP,我们可以使用任何与JAXP兼容的XML解析器。

JAXP接口包含了三个包:
(1)org.w3c.dom W3C推荐的用于XML标准规划文档对象模型的接口
(2)org.xml.sax 用于对XML进行语法分析的事情驱动的XML简单API(SAX)
(3)javax.xml.parsers解析器工厂工具,程序员获得并配置特殊的特殊语法分析器。

二.实例

1.所需xml 文件

Test.xml

  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. < books >   
  3.    < book   email = "zeh2007@126.com" >   
  4.    < name > C++编程思想 </ name >   
  5.    < price > 60.0 </ price >   
  6.    </ book >   
  7. </ books >  

students.xml

  1. <? xml   version = "1.0"   encoding = "gb2312" ?>   
  2. <? xml -stylesheet   type = "text/xsl"   href = "students.xsl" ?>   
  3. < students >   
  4.    < student   sn = "04378066" >   
  5.       < name > ldz </ name >   
  6.       < age > 23 </ age >   
  7.    </ student >   
  8.    < student   sn = "04378069" >   
  9.       < name > zeh </ name >   
  10.       < age > 21 </ age >   
  11.    </ student >   
  12. </ students >  

2.将xml 文件转化为dom

  1. public   class  DOMConvert {   
  2.   
  3.      public   static   void  main(String[] args) {   
  4.          //DOM 解析器的工厂实例   
  5.         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();   
  6.          try  {   
  7.              //从DOM 工厂获得DOM 解析器   
  8.             DocumentBuilder db=dbf.newDocumentBuilder();   
  9.              //解析XML 文档的输入流,得到一个 Document   
  10.             Document doc=db.parse( new  File( "xmlFil/students.xml " ));   
  11.              //建立一个XML 节点   
  12.             Element eltStu=doc.createElement( "student" );   
  13.             Element eltName=doc.createElement( "name" );   
  14.             Element eltAge=doc.createElement( "age" );   
  15.                
  16.             Text textName=doc.createTextNode( "yyr" );   
  17.             Text textAge=doc.createTextNode( "22" );   
  18.                
  19.             eltName.appendChild(textName);   
  20.             eltAge.appendChild(textAge);   
  21.                
  22.             eltStu.appendChild(eltName);   
  23.             eltStu.appendChild(eltAge);   
  24.             eltStu.setAttribute( "sn" , "04378072" );   
  25.              //将此节点插入根的孩子中   
  26.             Element root=doc.getDocumentElement();   
  27.             root.appendChild(eltStu);   
  28.              //获取stuent标签节点   
  29.             NodeList nl=root.getElementsByTagName( "student" );   
  30.              //删除第一个节点   
  31.             root.removeChild(nl.item( 0 ));   
  32.              //获取第一个节点   
  33.             Element eltStuChg=(Element)nl.item( 0 );   
  34.              //获取age标签节点   
  35.             Node nodeAgeChg=eltStuChg.getElementsByTagName( "age" ).item( 0 );   
  36.             nodeAgeChg.getFirstChild().setNodeValue( "20" );   
  37.            
  38.              int  len=nl.getLength();   
  39.              for ( int  i= 0 ;i
  40.                 Element elt=(Element)nl.item(i);   
  41.                 System.out.println( "编号:"  + elt.getAttribute( "sn" ));   
  42.                    
  43.                 Node nodeName=elt.getElementsByTagName( "name" ).item( 0 );   
  44.                 Node nodeAge=elt.getElementsByTagName( "age" ).item( 0 );   
  45.                    
  46.                 String name=nodeName.getFirstChild().getNodeValue();   
  47.                 String age=nodeAge.getFirstChild().getNodeValue();   
  48.                    
  49.                 System.out.println( "姓名:" +name);   
  50.                 System.out.println( "年龄:"  + age);   
  51.                    
  52.                 System.out.println( "--------------------" );   
  53.             }   
  54.              //实例化一个转换工厂   
  55.             TransformerFactory tff=TransformerFactory.newInstance();   
  56.              //获取一个转换实例   
  57.             Transformer tf=tff.newTransformer();   
  58.              //设置输出属性   
  59.             tf.setOutputProperty( "encoding" , "gb2312" );   
  60.              //根据Document对象新建一个DOM 数 据源   
  61.             DOMSource source= new  DOMSource(doc);   
  62.              //定义输出流   
  63.             StreamResult result= new  StreamResult( new  File( "convert.xml " ));   
  64.              //从数据源转换至输出流   
  65.             tf.transform(source,result);   
  66.         }   
  67.          catch  (ParserConfigurationException e) {   
  68.             e.printStackTrace();   
  69.         }    
  70.          catch  (SAXException e) {   
  71.             e.printStackTrace();   
  72.         }    
  73.          catch  (IOException e) {   
  74.             e.printStackTrace();   
  75.         }    
  76.          catch  (TransformerConfigurationException e) {   
  77.             e.printStackTrace();   
  78.         }   
  79.          catch  (TransformerException e) {   
  80.             e.printStackTrace();   
  81.         }   
  82.     }   
  83. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值