注释:curd操作:创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)
1.XML简单介绍:
xml:可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
简单来说,就是如下:
2.XMLcurd操作:
1.通过普通Java类创建xml:
package org.utils;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class CreateXml {
private Document doc;
private String filename;
public CreateXml(String filename) {
super();
this.filename = filename;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder docbuilder = null;
try {
docbuilder = factory.newDocumentBuilder(); //获取解析器
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
doc = docbuilder.newDocument();
}
public void create(){
Element root = doc.createElement("books");//创建根节点
doc.appendChild(root);
//创建第一个节点
Element book1 = doc.createElement("book");//此的根节点
Element name1 = doc.createElement("name");//此节点的第一个子节点
Element parse1 = doc.createElement("parse");//此节点的第二个子节点
book1.setAttribute("id", "1");//为book1结点设置属性Id
name1.appendChild(doc.createTextNode("Three Body"));//在name1的标签体设置内容
parse1.appendChild(doc.createTextNode("23.2"));//在parse1的标签体设置内容
book1.appendChild(name1);//将name1追加在book1里
book1.appendChild(parse1);//如上
//第一本书创建完成
root.appendChild(book1);
TransformerFactory tf = TransformerFactory.newInstance();
try {
Transformer transform = tf.newTransformer();
DOMSource source = new DOMSource(doc);
transform.setOutputProperty(OutputKeys.ENCODING, "utf-8");//设置文档编码
transform.setOutputProperty(OutputKeys.INDENT, "yes");//设置缩进
PrintWriter pw = new PrintWriter(new FileOutputStream(filename));
StreamResult result = new StreamResult(pw);//作为转换后结果保存
transform.transform(source, result);//将DOM源转换成xml输出
System.out.println("生成xml文件");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.对Xml进行一般操作:
package org.utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.bean.Book;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class URDXml {
private Document doc;
private String filename;
public URDXml(String filename) {
super();
this.filename = filename;
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = null;
try {
docBuilder = docFactory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
doc = docBuilder.parse(new File(filename));
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void read(){
List<Book> list = new ArrayList<Book>();
Element root = doc.getDocumentElement();
NodeList books = root.getElementsByTagName("book");
for(int i = 0;i < books.getLength();i++){
Node book = books.item(i);
Element ele = (Element) books.item(i);
if(book.getNodeType()==Element.ELEMENT_NODE){
Book bookObj = new Book();
NodeList bookAttr = book.getChildNodes();
bookObj.setId(Integer.parseInt(((Element)book).getAttribute("id")));
for(int j = 0;j < bookAttr.getLength();j++){
Node attr = bookAttr.item(j);
if(attr.getNodeType()==Element.ELEMENT_NODE){
if("name".equals(attr.getNodeName())){
bookObj.setName(attr.getFirstChild().getNodeValue());
}
else if("parse".equals(attr.getNodeName())){
bookObj.setPrice(Float.parseFloat(attr.getFirstChild().getNodeValue()));
}
}
}
list.add(bookObj);
}
}
Iterator<Book> it = list.iterator();
while(it.hasNext()){
Book book = it.next();
System.out.println(book.toString());
}
}
public void update(int id,Book newBook){
Element root = doc.getDocumentElement();
NodeList books = root.getElementsByTagName("book");
for(int i = 0;i < books.getLength();i++){
Node book = books.item(i);
int id2 = Integer.parseInt(((Element)book).getAttribute("id"));
if(id == id2){
NodeList bookAttr = book.getChildNodes();
for(int j = 0;j < bookAttr.getLength();j++){
Node attr = bookAttr.item(j);
if(attr.getNodeType()==Element.ELEMENT_NODE){
if("name".equals(attr.getNodeName())){
attr.getFirstChild().setNodeValue(newBook.getName());
}
else if("parse".equals(attr.getNodeName())){
attr.getFirstChild().setNodeValue(newBook.getPrice()+"");
}
}
}
System.out.println("修改完成");
}
}
TransformerFactory tf = TransformerFactory.newInstance();
try {
Transformer transform = tf.newTransformer();
DOMSource source = new DOMSource(doc);
transform.setOutputProperty(OutputKeys.ENCODING, "utf-8");//设置文档编码
transform.setOutputProperty(OutputKeys.INDENT, "yes");
PrintWriter pw = new PrintWriter(new FileOutputStream(filename));
StreamResult result = new StreamResult(pw);//作为转换后结果保存
transform.transform(source, result);//将DOM源转换成xml输出
System.out.println("更新成功");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}