java读取xml文件

首先创建DocumentBuilderFactory工厂产生DocumentBuilder对象

    DocumentBuilderFactory documentBuildFactory=DocumentBuilderFactory.newInstance();
    DocumentBuilder documentBuilder=documentBuildFactory.newDocumentBuilder();

创建document对象:

使用documentBuilder对象的parse方法

Document document=documentBuilder.parse(new File("bin/newxml.xml"));       

如果这个时候我们直接输出document.toString()得到的只是一个null值。我们需要进一步的解析

不知道怎么讲了,将全部代码贴在这里吧!

document.getDocumentElement()。获取document下的子元素也就是根元素。

然后是用root.getElementsByTagName()获取根的子元素的Nodelist集合。

注意在子元素全部同级的时候使用element.getChildNodes()比.getElementsByTagName()更省略代码

得到的解析节点会自己解析空格作为一个节点,后面可以使用if语句过滤掉。

package com.xml;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class ReadXml {
    public static void main(String[] args){
        
        try {
            
            
            DocumentBuilderFactory documentBuildFactory=DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder=documentBuildFactory.newDocumentBuilder();
            Document document=documentBuilder.parse(new File("bin/newxml.xml"));
            
            //System.out.println(document.toString());这样直接输出的到的是null,没有解析
            
            
            Element root=document.getDocumentElement();//获取根对象
            System.out.println(root.getTagName()+" cat="+root.getAttribute("cat"));
            NodeList lan= root.getElementsByTagName("lan");
            for(int j=0;j<lan.getLength();j++){
                System.out.println("---------------------");
                Element list=(Element) lan.item(j);
                System.out.println(list.getNodeName()+" id="+list.getAttribute("id"));
                
                /*Element name=(Element) list.getElementsByTagName("name").item(0);
                System.out.println("name="+name.getTextContent());
                Element ide=(Element) list.getElementsByTagName("ide").item(0);
                System.out.println("ide="+ide.getTextContent());*/
                
                NodeList clist=list.getChildNodes();
                for(int i=0;i<clist.getLength();i++){
                    Node c= clist.item(i);
                    if(c instanceof Element){
                        System.out.println(c.getNodeName()+"="+c.getTextContent());
                    }
                    
                }
            }
            
    
            
            
            
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

 这是我写的遍历node集合的代码:

注意:文本内容也是一个节点。不仅仅是在标签外的空格算节点,标签的内容也是节点。

public static void iteratorNode(Node node){
        if(node instanceof Element||node instanceof Document){
                NamedNodeMap attributeList=node.getAttributes(); 
                NodeList list=node.getChildNodes();
                System.out.println("list:"+list.getLength());
                System.out.print(node.getNodeName()+" ");
                if(attributeList!=null&&attributeList.getLength()>0){
                    for(int i=0;i<attributeList.getLength();i++){
                    Node nodetemp=attributeList.item(i);   
                   /* System.out.println(1);*/
                    System.out.print(nodetemp.getNodeName()+"=\""+nodetemp.getNodeValue()+"\" ");
                }
            }
            
            if(list.getLength()<=1&&!(node instanceof Document)){     /* 注意文本也是一个节点 */   
                System.out.println("value="+node.getTextContent());    
            } else { 
                System.out.println();
                for(int i=0;i<list.getLength();i++){              
                    iteratorNode(list.item(i));
                }
            }
        }
       
              
    }

 

posted @ 2016-05-15 01:07  guodaxia  阅读(751)  评论(0编辑  收藏  举报