<?xml version="1.0" encoding="GB2312"?>
<學生花名冊>
<學生 性別="男">
<姓名>李華</姓名>
<年齡>14</年齡>
<電話>6287555</電話>
</學生>
<學生 性別="男">
<姓名>張三</姓名>
<年齡>16</年齡>
<電話>8273425</電話>
</學生>
</學生花名冊>
public class StudentBean {
private String sex, name, phone;
private int age;
// 標準 getter/setter 略...
}
依賴 Apache Crimson 解析器(org.apache.crimson.tree.XmlDocument),使用 Vector 暫存多筆資料。
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);
}
}
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("轉換完成");
}
getElementsByTagName 返回即時 NodeList,遍歷時注意型別轉換 (Element/Text)。Text 節點包裝文字內容,再 appendChild 掛載。XmlDocument.write() 支援指定編碼輸出。