使用dom讀取xml文件

1 xml文件

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book id="1">
        <name>冰與火之歌</name>
        <author>喬治馬丁</author>
        <year>2014</year>
        <price>89</price>
    </book>
    <book id="2" class="2">
        <name>安徒生童話</name>
        <year>2004</year>
        <price>77</price>
        <language>English</language>
    </book>
    <book id="2" class="2" name="桑格">
    </book>
</bookstore>

2. 讀取xml文件類

package com.wx;


import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.IOException;
import java.io.InputStream;

public class ReadXML1 {
    public static Object  getObject(){
        InputStream resourceAsStream = null;
        try{
            //創建文檔對象
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
            Document doc;
            resourceAsStream = ReadXML1.class.getClassLoader().getResourceAsStream("test.xml");
            doc = builder.parse(resourceAsStream);
            //獲取包含類名的文本節點
            //獲取根節點---bookstore
            Element root = doc.getDocumentElement();
            String tagName = root.getTagName();
            System.out.println("根節點名稱:"+tagName);
            //獲取bookstore下的孩子,也就是book元素節點和text文本節點
            NodeList childNodes = root.getChildNodes();
            if(childNodes != null){
                for(int i = 0; i < childNodes.getLength();i++){
                    //獲取bookstore下節點,包括文本節點(將回車看車文本節點)和元素節點
                    Node item = childNodes.item(i);
                    if(item.getNodeType() == Node.ELEMENT_NODE){
                        //獲取元素節點中的屬性,也就是book中的屬性
                        NamedNodeMap attributes = item.getAttributes();
                        System.out.println(i+" 有"+attributes.getLength()+"個屬性");
                        //如果元素標籤中有屬性,遍歷該屬性
                        if(attributes.getLength()>0){
                            //遍歷屬性
                            for(int j = 0; j < attributes.getLength();j++){
                                Node item1 = attributes.item(j);
                                System.out.println("屬性:"+item1.getNodeName()+",屬性值:"+item1.getNodeValue());
                            }

                        }
                        //獲取book下的節點
                        NodeList childNodes1 = item.getChildNodes();
                        if(childNodes1.getLength()>0){
                            for(int k=0; k < childNodes1.getLength(); k++){
                                //獲取book下每個節點
                                Node item1 = childNodes1.item(k);
                                if(item1.getNodeType() == Node.ELEMENT_NODE){
                                    System.out.println(item1.getNodeName()+":"+item1.getFirstChild().getNodeValue());
                                }
                            }
                        }
                    }

                }
            }
//            NodeList nl = doc.getElementsByTagName("className");
//            Node classNode = nl.item(0).getFirstChild();
//            String cName = "com.wx."+classNode.getNodeValue();
//            //通過類名生成實例對象並返回
//            Class<?> aClass = Class.forName(cName);
//            Object obj = aClass.newInstance();
            return null;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                resourceAsStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    public static void main(String[] args) {
        ReadXML1.getObject();

    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章