XML的生成和解析

生成:把对象生成xml格式的字符串。

解析: 把xml格式的文档解析成对象。

/**

* 生成
* @param students
* @return
* @throws Exception
*/

public String serialize(List<Student> students) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument(); // 由builder创建新文档


Element rootElement = doc.createElement("students");


for (Student student : students) {
Element bookElement = doc.createElement("student");
// bookElement.setAttribute("id", book.getId() + "");
Element idElement = doc.createElement("id");
idElement.setTextContent(String.valueOf(student.getId()));
bookElement.appendChild(idElement);


Element nameElement = doc.createElement("name");
nameElement.setTextContent(student.getName());
bookElement.appendChild(nameElement);


Element priceElement = doc.createElement("age");
priceElement.setTextContent(student.getAge() + "");
bookElement.appendChild(priceElement);


rootElement.appendChild(bookElement);
}


doc.appendChild(rootElement);

TransformerFactory transFactory = TransformerFactory.newInstance();// 取得TransformerFactory实例
Transformer transformer = transFactory.newTransformer(); // 从transFactory获取Transformer实例
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); // 设置输出采用的编码方式

StringWriter writer = new StringWriter();
Result result = new StreamResult(writer);// 表明目标结果为writer

Source source = new DOMSource(doc); // 表明文档来源是doc
transformer.transform(source, result);

return writer.toString();

}



/**
* 解析文档

* @param is
* @return
* @throws Exception
*/
public List<Student> parse(InputStream is) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 创建dom解析工厂对象
DocumentBuilder db = dbf.newDocumentBuilder(); // 创建dom解析器对象
Document document = db.parse(is); // 使用dom解析器解析xml文件流得到document对象


List<Student> students = new ArrayList<>();


NodeList studentList = document.getElementsByTagName("student");
for (int i = 0; i < studentList.getLength(); i++) {
Student student = new Student();


Node nNode = studentList.item(i);
NodeList cNodeList = nNode.getChildNodes();
for (int j = 0; j < cNodeList.getLength(); j++) {
Node cNode = cNodeList.item(j);


if (cNode.getNodeType() == Node.TEXT_NODE) {
// do something ..
System.out.println(cNode.getTextContent());
}


if (cNode.getNodeType() == Node.ELEMENT_NODE) {
NamedNodeMap map = cNode.getAttributes();
if (map != null) {
for (int k = 0; k < map.getLength(); k++) {
Attr attr = (Attr) map.item(k);
System.out.println(attr.getName() + " = " + attr.getValue());
}
}


String content = cNode.getFirstChild().getTextContent();


if (cNode.getNodeName().equals("id")) {
student.setId(Integer.parseInt(content));


} else if (cNode.getNodeName().equals("name")) {
student.setName(content);


} else if (cNode.getNodeName().equals("age")) {
// student.setAge(Double.parseDouble(content));
student.setAge(Integer.parseInt(content));
}
}


}


students.add(student);
}


return students;
}


猜你喜欢

转载自blog.csdn.net/Mr_Zm1996/article/details/80208993