首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java XML 程式設計實戰:DOM 解析器讀寫學生花名冊完整範例

     編輯:Java 相關知識

範例 XML 結構 (Input.xml)

<?xml version="1.0" encoding="GB2312"?>
<學生花名冊>
  <學生 性別="男">
    <姓名>李華</姓名>
    <年齡>14</年齡>
    <電話>6287555</電話>
  </學生>
  <學生 性別="男">
    <姓名>張三</姓名>
    <年齡>16</年齡>
    <電話>8273425</電話>
  </學生>
</學生花名冊>

資料載體:StudentBean

public class StudentBean {
    private String sex, name, phone;
    private int age;
    // 標準 getter/setter 略...
}

核心邏輯:XMLTest 類別

依賴 Apache Crimson 解析器(org.apache.crimson.tree.XmlDocument),使用 Vector 暫存多筆資料。

讀取 XML (DOM 解析)

private void readXMLFile(String inFile) throws Exception {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(inFile);

    Element root = doc.getDocumentElement(); // 學生花名冊
    NodeList students = root.getElementsByTagName("學生");

    for (int i = 0; i < students.getLength(); i++) {
        Element student = (Element) students.item(i);
        StudentBean bean = new StudentBean();
        bean.setSex(student.getAttribute("性別"));

        // 解析子元素:姓名、年齡、電話
        NodeList names = student.getElementsByTagName("姓名");
        if (names.getLength() == 1) {
            Text t = (Text) names.item(0).getFirstChild();
            bean.setName(t.getNodeValue());
        }
        // 年齡、電話同理... (轉型處理)
        student_Vector.add(bean);
    }
}

寫入 XML (DOM 建構)

private void writeXMLFile(String outFile) throws Exception {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.newDocument();

    Element root = doc.createElement("學生花名冊");
    doc.appendChild(root);

    for (int i = 0; i < student_Vector.size(); i++) {
        StudentBean bean = (StudentBean) student_Vector.get(i);
        Element student = doc.createElement("學生");
        student.setAttribute("性別", bean.getSex());
        root.appendChild(student);

        // 建立姓名、年齡、電話元素並附加文字節點
        Element name = doc.createElement("姓名");
        name.appendChild(doc.createTextNode(bean.getName()));
        student.appendChild(name);
        // 年齡、電話同理...
    }

    // 輸出檔案
    FileOutputStream fos = new FileOutputStream(outFile);
    OutputStreamWriter osw = new OutputStreamWriter(fos);
    ((XmlDocument) doc).write(osw, "GB2312");
    osw.close(); fos.close();
}

執行入口

public static void main(String[] args) throws Exception {
    XMLTest test = new XMLTest();
    student_Vector = new Vector();
    test.readXMLFile("Input.xml");
    test.writeXMLFile("Output.xml");
    System.out.println("轉換完成");
}

關鍵技術點

  • DOM 模型將整份 XML 載入記憶體形成樹狀結構,適合中小型檔案且需頻繁修改。
  • getElementsByTagName 返回即時 NodeList,遍歷時注意型別轉換 (Element/Text)。
  • 寫入時需建立 Text 節點包裝文字內容,再 appendChild 掛載。
  • Crimson 專屬 XmlDocument.write() 支援指定編碼輸出。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved