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

注释: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进行操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值