範例 XML 檔案:Input.xml
<?xml version="1.0" encoding="GB2312"?>
<學生花名冊>
<學生 性別="男">
<姓名>李華</姓名>
<年齡>14</年齡>
<電話>6287555</電話>
</學生>
<學生 性別="男">
<姓名>張三</姓名>
<年齡>16</年齡>
<電話>8273425</電話>
</學生>
</學生花名冊>
資料 Bean:StudentBean
public class StudentBean {
private String sex, name, phone; private int age;
// getter/setter 省略
}
DOM 解析讀取:readXMLFile()
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 stu = (Element) students.item(i);
StudentBean bean = new StudentBean();
bean.setSex(stu.getAttribute("性別"));
bean.setName(getTextContent(stu, "姓名"));
bean.setAge(Integer.parseInt(getTextContent(stu, "年齡")));
bean.setPhone(getTextContent(stu, "電話"));
studentVector.add(bean);
}
}
private String getTextContent(Element parent, String tagName) {
NodeList nl = parent.getElementsByTagName(tagName);
if (nl.getLength() > 0) {
Element e = (Element) nl.item(0);
Node child = e.getFirstChild();
return (child != null) ? child.getNodeValue() : "";
}
return "";
}
DOM 建立寫入:writeXMLFile()
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 (StudentBean bean : studentVector) {
Element stu = doc.createElement("學生");
stu.setAttribute("性別", bean.getSex());
root.appendChild(stu);
appendElement(doc, stu, "姓名", bean.getName());
appendElement(doc, stu, "年齡", String.valueOf(bean.getAge()));
appendElement(doc, stu, "電話", bean.getPhone());
}
try (FileOutputStream fos = new FileOutputStream(outFile);
OutputStreamWriter osw = new OutputStreamWriter(fos, "GB2312")) {
((org.apache.crimson.tree.XmlDocument) doc).write(osw, "GB2312");
}
}
private void appendElement(Document doc, Element parent, String tag, String text) {
Element e = doc.createElement(tag);
e.appendChild(doc.createTextNode(text));
parent.appendChild(e);
}
關鍵依賴與環境
- JDK 1.3.1+ / 1.4.0 測試通過。
- XML 解析器:Apache Crimson (
org.apache.crimson.tree.XmlDocument 用於寫入編碼)。
- 匯入套件:
javax.xml.parsers, org.w3c.dom, java.io, java.util。
執行流程
- 建立
Vector<StudentBean> 儲存資料。
- 呼叫
readXMLFile("Input.xml") 解析填充。
- 呼叫
writeXMLFile("Output.xml") 序列化輸出。
- 對比 Input/Output 驗證正確性。