JAXP解析XML

JAXP解析XML

1准备解析的xml文件
      parseXML.xml
      
<? xml version = " 1.0 "  encoding = " UTF-8 " ?>
< states >
    
< north >
        
< state > Minnesota </ state >
        
< state > Iowa </ state >
        
< state > North Dakota </ state >
    
</ north >
    
< south >
        
< state > Texas </ state >
        
< state > Oklahoma </ state >
        
< state > Louisiana </ state >
    
</ south >
    
< east >
        
< state > New York </ state >
        
< state > North Carolina </ state >
        
< state > Massachusetts </ state >
    
</ east >
    
< west >
        
< state > California </ state >
        
< state > Oregon </ state >
        
< state > Nevada </ state >
    
</ west >
</ states >
2、解析文件
      DomToXml.java
      
package  dom.test;
import  java.io. * ;

import  javax.xml.parsers.DocumentBuilder;
import  javax.xml.parsers.DocumentBuilderFactory;
import  javax.xml.parsers.ParserConfigurationException;
import  javax.xml.transform.Transformer;
import  javax.xml.transform.TransformerConfigurationException;
import  javax.xml.transform.TransformerException;
import  javax.xml.transform.TransformerFactory;
import  javax.xml.transform.dom.DOMSource;
import  javax.xml.transform.stream.StreamResult;
import  org.w3c.dom.Document;
import  org.w3c.dom.Element;
import  org.w3c.dom.Node;
import  org.w3c.dom.NodeList;
import  org.w3c.dom.Text;
import  org.xml.sax.SAXException;


/**
 * 
@author  windfree
 *
 
*/
 
// JAXP是java API for XML processing,几用于处理xml文档的java语言编程接口。
 
// JAXP支持DOM、XSLT、SAX等标准 
 
public   class  DomToXml {
    
public   static  DocumentBuilderFactory factory;
    
public   static  DocumentBuilder parser;
    
public   static  Document document;
    
public   static  TransformerFactory transformerFactory;
    
public   static  Transformer transform;
    
public   static  DOMSource domSource;
    
public   static  StreamResult streamResult;
    
public   static   void  main(String[] args) {
        
try  {
            test();
        } 
catch  (SAXException e) {
            
//  TODO Auto-generated catch block
            e.printStackTrace();
        } 
catch  (IOException e) {
            
//  TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
private   static   void  createNode() {
        Element root
= document.getDocumentElement();
        Element firstNode
= document.createElement( " other " );
        root.appendChild(firstNode);
        Text text
= document.createTextNode( " test " );
        Element nextNode
= document.createElement( " state " );
        nextNode.appendChild(text);
        firstNode.appendChild(nextNode);
        
        
    }
    
public   static   void  test()  throws  SAXException, IOException{
    
/* DocumentBuilderFactory的静态方法newInstance创建了一个DocumentBuilderFactory实例,然后调用
      newDocumentBuilder()方法创建一个DocumentBuilder对象
       用DocumentBuilder的parse()方法就可以来解析xml文档并建立Dom模型。
        
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 创建一个xml解析器
      Document接口描述了对应于整个xml文档的对应树,提供对文档的访问。
        
      DOM标准模型中并没有定义输出的接口,因而如果需要进行文档输出的话,
       就需要用到JAXP的扩展,使用到XmlDocument。这儿有一个较为简便的方法,
       就是用强制类型转换,把一个Document类转换成XmlDocument,然后,就可以使用XmlDocument的write()方法了
      XmlDocument xdoc = (XmlDocument) document; 
      xdoc.write (System.out);
    
*/
        
// 获取一个xml解析器
        factory = DocumentBuilderFactory.newInstance();
        
try  {
            
// 解析XML文件生成DOM文档的接口类,以便访问DOM
            parser = factory.newDocumentBuilder();
            document
= parser.parse( " parseXML.xml " );
            Element element 
=  document.getDocumentElement();
            System.out.println(element);
            NodeList list
= element.getChildNodes();
            GetElement(list);//解析子节点
            createNode();//向dom中插入节点,并写入xml中
        } 
catch  (ParserConfigurationException e) {
            e.printStackTrace();
        }
        
// 获得将DOM文档转化为xml的转换器
        transformerFactory = TransformerFactory.newInstance();
        
// 下面调用JAXP的XSTL引擎来实现DOM树中的数据到xml文件的功能,XSTL的引擎输入为DOMSource对象,输出为StreamResult对象。
         try  {
            
// Transform相当于一个XSTL引擎,通常我们用它的处理XSL文件,
            
// 这里我们用它来输出xml文件
            transform = transformerFactory.newTransformer();
            
// 创建一个DOMSource对象,参数为Document对象,该对象表现为转化成别的表达形式的信息容器。
            domSource = new  DOMSource(document);
            
// 创建一个File对象,代表DOM Tree所包含的数据的输出介质,这是一个XML文件
            
// 创建一个StreamResult对象,该对象是将DOM对象文档转换为其他文档的容器,可以是一个xml文件,txt文件。
            streamResult = new  StreamResult( new  File( " test.xml " ));
            
// 调用transform将DOM文件转换为xml文件
            transform.transform(domSource, streamResult);
            
        } 
catch  (TransformerConfigurationException e) {
            
            e.printStackTrace();
        } 
catch  (TransformerException e) {
            
//  TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
private   static   void  GetElement(NodeList list) {
        Node node;
        
int  i;
        String str;
        
if (list.getLength() == 0 ){
            
return ;
        }
        
for (i = 0 ;i < list.getLength();i ++ ){
            
            node 
= list.item(i);
            
if (node.getNodeType() == 1 ){ // Node类型对象
                System.out.println(node.getNodeName());
                GetElement(node.getChildNodes());
            }
            
else   if (node.getNodeType() == 3 ){ // Text类型对象
                str = node.getNodeValue();
                
if (str.length() > 0 ){
                    System.out.println(str);
                    
                }
            }
        }
    }
}

   最近在学习ajax,在服务器解析xml文件,所以开始学JAXP和digester.
posted on 2006-12-11 08:58 windfree 阅读(596) 评论(0)   编辑   收藏 所属分类: dom

你可能感兴趣的:(JAXP解析XML)