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 阅读(707) 评论(0)  编辑  收藏 所属分类: dom

只有注册用户登录后才能发表评论。


网站导航:
相关文章: