下面代码用到了jdom和dom4j两个包
public class JDOMXML_1 {
public static void main(String[] args) throws IOException, JDOMException {
BuildXMLDoc();
}
public static void BuildXMLDoc() throws IOException, JDOMException {
Element root = new Element("学生花名册");
Document doc = new Document(root); // 根节点添加到文档中;
for (int i = 0; i < 2; i++) {
Element elements = new Element("学生");
elements.setAttribute("id", String.valueOf(i));
// 给 user 节点添加子节点并赋值
elements.addContent(new Element("姓名").setText("张三"));
elements.addContent(new Element("年龄").setText("28"));
elements.addContent(new Element("性别").setText("男"));
for (int j = 0; j < 2; j++) {
Element elements2 = new Element("地址");
elements2.addContent(new Element("浦东").setText("香楠路"));
elements2.addContent(new Element("杨浦").setText("大学路"));
elements2.addContent(new Element("黄浦").setText("南京西路"));
elements.addContent(elements2);
}
root.addContent(elements);
}
XMLOutputter xmlOut = new XMLOutputter();
xmlOut.output(doc, new FileOutputStream("D:\\student_4.xml"));
}
}
public class JDOMXML_2 {
public static void main(String[] args) {
jDom_DOM_Reader();
jDom_SAX_Reader();
}
@SuppressWarnings("unchecked")
private static void jDom_DOM_Reader() {
DOMBuilder builder = new DOMBuilder();
DOMParser parser = new DOMParser();
String output = "";
try {
parser.parse("D:\\student_4.xml");
org.w3c.dom.Document domDocument = parser.getDocument();
org.jdom.Document jdomDocument = builder.build(domDocument);
Element root = jdomDocument.getRootElement();
output += "Root Node: " + root.getName() + "\r\n";
List<Element> children = root.getChildren();
output += "SubNodes's Size " + children.size() + "\r\n";
for(int i = 0; i < children.size(); i++){
Element node = children.get(i);
output += i + " subNode: " + node.getName() + "\r\n";
List<Attribute> attrs = node.getAttributes();
for(int k = 0; k < attrs.size(); k++){
Attribute attr = attrs.get(k);
output += "Attribute: " + attr.getName() + " --> " + attr.getValue() + "\r\n";
}
List<Element> childrenList = node.getChildren();
for(int j = 0; j < childrenList.size(); j++){
Element childNode = childrenList.get(j);
output += "SubNode: " + childNode.getName() + " --> " + childNode.getValue() + "\r\n";
}
}
System.out.println(output);
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
private static void jDom_SAX_Reader() {
SAXBuilder builder = new SAXBuilder();
String output = "";
try {
org.jdom.Document doc = builder.build("D:\\student_4.xml");
Element root = doc.getRootElement();
List<Element> children = root.getChildren();
output += "id\t" + "姓名\t" + "年龄\t" + "性别\t" + "\r\n";
for(int i = 0; i < children.size(); i++){
Element node = children.get(i);
Attribute attr = node.getAttribute("id");
output += attr.getValue() + "\t";
output += node.getChildText("姓名") + "\t";
output += node.getChildText("年龄") + "\t";
output += node.getChildText("性别") + "\r\n";
}
System.out.println(output);
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class DOMXML_1 {
public static void main(String[] args) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
document.setXmlVersion("1.0");
// **************************************************************************************
Element root = document.createElement("学生花名册"); // 创建根节点
document.appendChild(root);
Element student = document.createElement("学生");
student.setAttribute("姓名", "张三");
root.appendChild(student);
Element sex = document.createElement("性别");
sex.setTextContent("男");
student.appendChild(sex);
Element age = document.createElement("年龄");
age.setTextContent("25");
student.appendChild(age);
Element phone = document.createElement("电话");
phone.setTextContent("55660535|13622654565");
student.appendChild(phone);
// **************************************************************************************
student = document.createElement("学生");
student.setAttribute("姓名", "李四");
root.appendChild(student);
sex = document.createElement("性别");
sex.setTextContent("女");
student.appendChild(sex);
age = document.createElement("年龄");
age.setTextContent("18");
student.appendChild(age);
Element addr = document.createElement("地址");
addr.setTextContent("title,publisher,published_calendar");
student.appendChild(addr);
// **************************************************************************************
File file = new File("D://student_1.xml"); //生成xml文件
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream out = new FileOutputStream(file);
StreamResult xmlResult = new StreamResult(out);
// **************************************************************************************
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transFormer = transFactory.newTransformer();
DOMSource domSource = new DOMSource(document);
transFormer.transform(domSource, xmlResult); //输出xml文件
System.out.println(file.getAbsolutePath());
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class DOMXML_2 {
private Vector<StudentBean> student_vector = new Vector<StudentBean>();
public DOMXML_2() {
String[] names = {"张三", "李四", "王五"};
String[] sexs = {"男", "女", "男"};
int[] ages = {25, 22, 31};
String[] phones = {"021-55662222", "027-36588814", "010-66452235"};
for (int i = 0; i < phones.length; i++) {
StudentBean sb = new StudentBean();
sb.setName(names[i]);
sb.setSex(sexs[i]);
sb.setAge(ages[i]);
sb.setPhone(phones[i]);
student_vector.addElement(sb);
}
}
public static void main(String[] args) {
DOMXML_2 test = new DOMXML_2();
File file = new File("D://student_2.xml");
try {
test.domWrite(file);
test.domRead(file);
} catch (Exception e) {
e.printStackTrace();
}
}
private void domRead(File inFile) throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
org.w3c.dom.Document doc = db.parse(inFile);
// 取跟目录
org.w3c.dom.Element root = doc.getDocumentElement();
// 取学生列表元素
NodeList students = root.getElementsByTagName("学生");
for (int i = 0; i < students.getLength(); i++) {
// 取学生元素
org.w3c.dom.Element student = (org.w3c.dom.Element) students.item(i);
StudentBean studentBean = new StudentBean();
studentBean.setName(student.getAttribute("姓名"));
System.out.println("Name = " + studentBean.getName());
NodeList sexs = student.getElementsByTagName("性别");
if (sexs.getLength() == 1) {
org.w3c.dom.Element e = (org.w3c.dom.Element) sexs.item(0);
org.w3c.dom.Text t = (org.w3c.dom.Text) e.getFirstChild();
studentBean.setSex(t.getNodeValue());
System.out.println("Sex = " + studentBean.getSex());
}
NodeList ages = student.getElementsByTagName("年龄");
if (ages.getLength() == 1) {
org.w3c.dom.Element e = (org.w3c.dom.Element) ages.item(0);
org.w3c.dom.Text t = (org.w3c.dom.Text) e.getFirstChild();
studentBean.setAge(Integer.parseInt(t.getNodeValue()));
System.out.println("Age = " + studentBean.getAge());
}
NodeList phones = student.getElementsByTagName("电话");
if (phones.getLength() == 1) {
org.w3c.dom.Element e = (org.w3c.dom.Element) phones.item(0);
org.w3c.dom.Text t = (org.w3c.dom.Text) e.getFirstChild();
studentBean.setPhone(t.getNodeValue());
System.out.println("Phone = " + studentBean.getPhone());
}
student_vector.add(studentBean);
System.out.println("============================");
}
}
private void domWrite(File outFile) throws ParserConfigurationException, FileNotFoundException, TransformerException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
org.w3c.dom.Document doc = db.newDocument();
// 建立根元素
org.w3c.dom.Element root = doc.createElement("学生花名册");
// 将根元素添加到文档
doc.appendChild(root);
// 取学生信息的Bean列表
for (int i = 0; i < student_vector.size(); i++) {
StudentBean studentBean = (StudentBean) student_vector.get(i);
org.w3c.dom.Element student = doc.createElement("学生");
student.setAttribute("姓名", studentBean.getName());
root.appendChild(student);
org.w3c.dom.Element sex = doc.createElement("性别");
student.appendChild(sex);
org.w3c.dom.Text tSex = doc.createTextNode(studentBean.getSex());
sex.appendChild(tSex);
org.w3c.dom.Element age = doc.createElement("年龄");
student.appendChild(age);
org.w3c.dom.Text tAge = doc.createTextNode(String.valueOf(studentBean.getAge()));
age.appendChild(tAge);
org.w3c.dom.Element phone = doc.createElement("电话");
student.appendChild(phone);
org.w3c.dom.Text tPhone = doc.createTextNode(studentBean.getPhone());
phone.appendChild(tPhone);
}
FileOutputStream fos = new FileOutputStream(outFile);
StreamResult xmlResult = new StreamResult(fos);
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transFormer = transFactory.newTransformer();
DOMSource domSource = new DOMSource(doc);
transFormer.transform(domSource, xmlResult);
}
private class StudentBean {
private String sex;
private String name;
private int age;
private String phone;
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
}
public class XMLEncoder_XMLDecoder {
public static void object2XML(Object obj, String path) throws FileNotFoundException {
File file = new File(path);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
XMLEncoder xmlEncoder = new XMLEncoder(bos); // 构造一个XML编码器
xmlEncoder.writeObject(obj); // 使用XML编码器写对象
xmlEncoder.close();
}
public static Object xml2Object(String path) throws FileNotFoundException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
XMLDecoder xmlDecoder = new XMLDecoder(bis); // 构造一个XML解码器
Object obj = xmlDecoder.readObject(); // 使用XML解码器读对象
xmlDecoder.close();
return obj;
}
public static void main(String[] args) throws IOException {
// *****User(JavaBean)的定义必须为Public的,否则会报错。That should be STATIC. Any public instance methods have to follow the bean get/set pattern.
User user = new User();
user.setName("张三");
user.setAge(29);
user.setSex("男");
user.setPhone("15825253636");
String path = "D://student_3.xml";
XMLEncoder_XMLDecoder.object2XML(user, path);
User newUser = (User) XMLEncoder_XMLDecoder.xml2Object(path);
System.out.println(newUser.getName());
System.out.println(newUser.getAge());
System.out.println(newUser.getSex());
System.out.println(newUser.getPhone());
}
}
public class User {
private String sex;
private String name;
private int age;
private String phone;
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
22