使用遞歸解析給定的任意一個xml文檔並且將其內容輸出到命令行上

import java.io.File;  
  
import javax.xml.parsers.DocumentBuilder;  
import javax.xml.parsers.DocumentBuilderFactory;  
  
import org.w3c.dom.Attr;  
import org.w3c.dom.Comment;  
import org.w3c.dom.Document;  
import org.w3c.dom.Element;  
import org.w3c.dom.NamedNodeMap;  
import org.w3c.dom.Node;  
import org.w3c.dom.NodeList;  
  
/** 
 * 使用遞歸解析給定的任意一個xml文檔並且將其內容輸出到命令行上 
 */  
public class testDOMXML{  

    public static void main(String[] args) throws Exception  
    {  
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
        DocumentBuilder db = dbf.newDocumentBuilder();  
        Document doc = db.parse(new File("C://Users//Administrator//Desktop//test.xml"));  
        //獲得根元素結點  
        Element root = doc.getDocumentElement();  
        parseElement(root);  
    }  
      
    private static void parseElement(Element element)  
    {  
        String tagName = element.getNodeName();  
        NodeList children = element.getChildNodes();  
        System.out.print("<" + tagName);  
        //element元素的所有屬性所構成的NamedNodeMap對象,需要對其進行判斷  
        NamedNodeMap map = element.getAttributes();  
        //如果該元素存在屬性  
        if(null != map){
        for(int i = 0; i < map.getLength(); i++){ 
                //獲得該元素的每一個屬性  
                Attr attr = (Attr)map.item(i);  
                String attrName = attr.getName();  
                String attrValue = attr.getValue();  
                System.out.print(" " + attrName + "=\"" + attrValue + "\"");  
            }  
        }  
        System.out.print(">");  
        for(int i = 0; i < children.getLength(); i++){  
            Node node = children.item(i);  
            //獲得結點的類型  
            short nodeType = node.getNodeType();  
            if(nodeType == Node.ELEMENT_NODE){  
                //是元素,繼續遞歸  
                parseElement((Element)node);  
            }  
            else if(nodeType == Node.TEXT_NODE){  
                //遞歸出口  
                System.out.print(node.getNodeValue());  
            }  
            else if(nodeType == Node.COMMENT_NODE){  
                System.out.print("<!--");  
                Comment comment = (Comment)node;  
                //註釋內容  
                String data = comment.getData();  
                System.out.print(data);  
                System.out.print("-->");  
            }  
        }  
        System.out.print("</" + tagName + ">");  
    }  
}  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章