入门:使用Dom对xml进行curd操作

来源:互联网 发布:芳纶纸淘宝 编辑:程序博客网 时间:2024/05/29 13:23
注释:curd操作:创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)

1.XML简单介绍:

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();        }    }}

3.这是java最简单操作的方法,同时也是最复杂最浪费时间的一种,下个文章我将采用dom4j来对xml进行操作

0 0
原创粉丝点击