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 男