java解析String字串xml 多級節點NodeList

來源:互聯網
上載者:User

NodeList subNodeList = rootNode.getChildNodes();   
for (int i = 0; i < subNodeList.getLength(); i++) {  
     System.out.println("子節點的節點名稱:" + subNodeList.item(i).getNodeName());  
     System.out.println("子節點的節點常值內容:" + subNodeList.item(i).getTextContent());  
}  


<?xml version="1.0" encoding="UTF-8"?>   <Server port="8005" shutdown="SHUTDOWN">  
    <Service name="Catalina">  
        <Connector>第一個連接器</Connector>  
        <Connector>第二個連接器  
            <open>開啟服務</open>  
            <init>初始化一下</init>  
            <service>執行請求服務</service>  
            <destory>銷毀一下</destory>  
            <close>關閉服務</close>  
        </Connector>  
    </Service>  
</Server>  


public void parseXml03(){  
    try{  
        //建立DocumentBuilder工廠執行個體  
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
        //new一個新的DocumentBuilder  
        DocumentBuilder db = dbf.newDocumentBuilder();  
        InputStream inputStream = this.getClass().getResourceAsStream("server03.xml");  
  
        Document document = db.parse(inputStream);  
        //根據節點名稱擷取節點集合  
        NodeList nodeList = document.getDocumentElement().getChildNodes();  
        for (int i = 0; i < nodeList.getLength(); i++) {  
            Node node = nodeList.item(i);  
            if(!"#text".equals(node.getNodeName())){  
                System.out.println("【1】" + node.getNodeName() + ":" + node.getFirstChild().getNodeValue());  
            }  
            NodeList subNodeList = node.getChildNodes();  
            for (int j = 0; j < subNodeList.getLength(); j++) {  
                Node subNode = subNodeList.item(j);  
                if(!"#text".equals(subNode.getNodeName())){  
                    System.out.println("      【2】" + subNode.getNodeName() + ":" + subNode.getFirstChild().getNodeValue());  
                }  
                NodeList subSubNodeList = subNode.getChildNodes();  
                for (int k = 0; k < subSubNodeList.getLength(); k++) {  
                    Node subSubNode = subSubNodeList.item(k);  
                    if(!"#text".equals(subSubNode.getNodeName())){  
                        System.out.println("            【3】" + subSubNode.getNodeName() + ":" + subSubNode.getFirstChild().getNodeValue());  
                    }  
                }  
            }  
        }  
    } catch (ParserConfigurationException e) {  
        e.printStackTrace();  
    } catch (SAXException e) {  
        e.printStackTrace();  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  

}


接下來執行該類的main方法,console效果如下:



<?xml version="1.0" encoding="GB2312"?><學生花名冊>     <學生 性別 = "男">         <姓名>李華</姓名>         <年齡>14</年齡>     </學生>     <學生 性別 = "男">         <姓名>張三</姓名>         <年齡>16</年齡>      </學生></學生花名冊>
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.io.OutputStreamWriter;import java.util.Iterator;import java.util.Vector;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.OutputKeys;import javax.xml.transform.Result;import javax.xml.transform.Source;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;public class DomTest {    Vector students_Vector;    private Vector readXMLFile(String file) throws Exception {        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();        DocumentBuilder builder = dbf.newDocumentBuilder();        Document doc = builder.parse(file); // 擷取到xml檔案        // 下面開始讀取        Element root = doc.getDocumentElement(); // 擷取根項目        NodeList students = root.getElementsByTagName("學生");        students_Vector = new Vector();        for (int i = 0; i < students.getLength(); i++) {            // 一次取得每一個學生元素            Element ss = (Element) students.item(i);            // 建立一個學生的執行個體            student stu = new student();            stu.setSex(ss.getAttribute("性別"));            NodeList names = ss.getElementsByTagName("姓名");            Element e = (Element) names.item(0);            Node t = e.getFirstChild();            stu.setName(t.getNodeValue());            NodeList ages = ss.getElementsByTagName("年齡");            e = (Element) ages.item(0);            t = e.getFirstChild();            stu.setAge(Integer.parseInt(t.getNodeValue()));            students_Vector.add(stu);        }        return students_Vector;    }    /**     * 功能:直接提取XML格式字串中的資訊     */    private Vector readXMLString(String xmlStr) throws Exception {        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();        DocumentBuilder builder = dbf.newDocumentBuilder();        InputStream inputStream = new ByteArrayInputStream(xmlStr.getBytes());        Document doc = builder.parse(inputStream); //        // 下面開始讀取        Element root = doc.getDocumentElement(); // 擷取根項目        NodeList students = root.getElementsByTagName("學生");        students_Vector = new Vector();        for (int i = 0; i < students.getLength(); i++) {            // 一次取得每一個學生元素            Element ss = (Element) students.item(i);            // 建立一個學生的執行個體            student stu = new student();            stu.setSex(ss.getAttribute("性別"));            NodeList names = ss.getElementsByTagName("姓名");            Element e = (Element) names.item(0);            Node t = e.getFirstChild();            stu.setName(t.getNodeValue());            NodeList ages = ss.getElementsByTagName("年齡");            e = (Element) ages.item(0);            t = e.getFirstChild();            stu.setAge(Integer.parseInt(t.getNodeValue()));            students_Vector.add(stu);        }        return students_Vector;    }    // 將Document內容 寫入XML字串並返回    private String callWriteXmlString(Document doc, String encoding) {        try {            Source source = new DOMSource(doc);            ByteArrayOutputStream outStream = new ByteArrayOutputStream();            OutputStreamWriter write = new OutputStreamWriter(outStream);            Result result = new StreamResult(write);            Transformer xformer = TransformerFactory.newInstance()                    .newTransformer();            xformer.setOutputProperty(OutputKeys.ENCODING, encoding);            xformer.transform(source, result);            return outStream.toString();        } catch (TransformerConfigurationException e) {            e.printStackTrace();            return null;        } catch (TransformerException e) {            e.printStackTrace();            return null;        }    }    /**     * 功能:產生XML格式的字串     */    public String writeXMLString() {        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();        DocumentBuilder builder = null;        try {            builder = dbf.newDocumentBuilder();        } catch (Exception e) {        }        Document doc = builder.newDocument();        Element root = doc.createElement("學生花名冊");        doc.appendChild(root); // 將根項目添加到文檔上        // 擷取學生資訊        for (int i = 0; i < students_Vector.size(); i++) {            student s = (student) students_Vector.get(i);            // 建立一個學生            Element stu = doc.createElement("學生");            stu.setAttribute("性別", s.getSex());            root.appendChild(stu);// 添加屬性            // 建立文本姓名節點            Element name = doc.createElement("姓名");            stu.appendChild(name);            Text tname = doc.createTextNode(s.getName());            name.appendChild(tname);            // 建立文本年齡節點            Element age = doc.createElement("年齡");            stu.appendChild(age); // 將age添加到學生節點上            Text tage = doc.createTextNode(String.valueOf(s.getAge()));            age.appendChild(tage); // 將文本節點放在age節點上        }        try {            String result = callWriteXmlString(doc, "gb2312");            return result;        } catch (Exception e) {            e.printStackTrace();            return null;        }    }    /**     * 主函數     */    public static void main(String args[]) {        String str = "xml\\student.xml";        DomTest t = new DomTest();        System.out.println("解析原始XML檔案:");        try {            Vector v = t.readXMLFile(str);            Iterator it = v.iterator();            while (it.hasNext()) {                student s = (student) it.next();                System.out.println(s.getName() + "\t" + s.getAge() + "\t"                        + s.getSex());            }        } catch (Exception e) {            e.printStackTrace();        }        String xmlStr = t.writeXMLString();        System.out.println("\n產生的XML字串:\n" + xmlStr);        try {            Vector v = t.readXMLString(xmlStr);            Iterator it = v.iterator();            System.out.println("\n解析產生的XML字串:");            while (it.hasNext()) {                student s = (student) it.next();                System.out.println(s.getName() + "\t" + s.getAge() + "\t"                        + s.getSex());            }        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}class student {    private String sex;    private String name;    private int age;    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public void setSex(String s) {        sex = s;    }    public String getSex() {        return sex;    }    public void setName(String n) {        name = n;    }    public String getName() {        return name;    }}

輸出:

解析原始XML檔案:李華    14    男張三    16    男產生的XML字串:<?xml version="1.0" encoding="GB2312" standalone="no"?><學生花名冊><學生 性別="男"><姓名>李華</姓名><年齡>14</年齡></學生><學生 性別="男"><姓名>張三</姓名><年齡>16</年齡></學生></學生花名冊>解析產生的XML字串:李華    14    男張三    16    男


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.