XML编程增,删,改,查

1 XML解析方式分为两种:dom和sax
dom:是W3C组织推荐的处理XML的一种方式。
sax:不是官方标准,但它是XML社区事实上的标准。乎所有的XML解析器都支持它。
Dom解析特点:
dom模式下,解析引擎会装载整个文档,文档中每一个节点变成一个个对象后,会按照文档中的节点关系,构建各个对象关系,也就是Dom树,

Dom解析的优缺点:
1.dom编程的优点是对XML文档增删查改,比较方便。
2.缺点:dom编程需装在整个XML文档,所以对计算机内存消耗大,不适合处理大文档,大文档采用DOM解析很容易导致内存溢出。
sax解析:就不多说了!下面写的东西都是用dom编程写的。
解析器:JAXP
在javax.xml.parser包中,定义几个工厂类,调用这些工厂类,可以得到对XML文档解析的DOM或SAX解析对象。
在javax.xml.parser包中的DocumentBuilderFactory用于创建DoM模式的解析对象,抽象类不能创建对象,提供了静态方法创建实例:public static DocumentBuilderFactory newInstance();

package cn.huaxin.xml;

import java.io.FileOutputStream;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.junit.Test;
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 Demo3 {
    /**
     *  查询节点内容<br/>
     * @throws ParserConfigurationException
     * @throws SAXException
     * @throws IOException
     */
    @Test
    public void read() throws ParserConfigurationException, SAXException,
            IOException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse("");
        NodeList list = document.getElementsByTagName("书名");
        Node node = list.item(1);
        String content = node.getTextContent();
        System.out.println(content);
    }
/**
 *  遍历所有标签(document)节点<br/>
 * @throws ParserConfigurationException
 * @throws SAXException
 * @throws IOException
 */
    public void read2() throws ParserConfigurationException, SAXException,
            IOException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse("");
        // 得到根节点
        Node root = document.getElementsByTagName("书架").item(0);
        list(root);
    }

/**
 *  获取node下面所有元素节点,层层递归<br/>
 * @param node---起始节点
 */
    private void list(Node node) {
        if (node instanceof Element) {
            System.out.println(node.getNodeName());
        }
        NodeList list = node.getChildNodes();
        for (int i = 0; i < list.getLength(); i++) {
            Node child = list.item(i);
            list(child);

        }

    }
/**
 *  获取节点的属性<br/>
 * @throws ParserConfigurationException
 * @throws SAXException
 * @throws IOException
 */
    public void read3() throws ParserConfigurationException, SAXException,
            IOException {
        //创建解析工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    //得到解析器
        DocumentBuilder builder = factory.newDocumentBuilder();
    //解析XML文档
        Document document = builder.parse("XML文档路劲");
        // 得到根节点
        Element bookName = (Element) document.getElementsByTagName("书名")
                .item(0);
        String name = bookName.getAttribute("name");
    }

    /**
     * 向XML文档添加节点<br/>
     * @throws ParserConfigurationException
     * @throws SAXException
     * @throws IOException
     * @throws TransformerException
     */
    public void add() throws ParserConfigurationException, SAXException,
            IOException, TransformerException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse("");
        // 创建节点
        Element price = document.createElement("售价");
        // 改变节点内容
        price.setTextContent("59.00元");
        // 得到根节点
        Element bookname = (Element) document.getElementsByTagName("书").item(0);
        bookname.appendChild(price);
        // 把更新内存写回到文档
        TransformerFactory trans = TransformerFactory.newInstance();
        Transformer tf = trans.newTransformer();
        tf.transform(new DOMSource(document), new StreamResult(
                new FileOutputStream("path")));
    }

/**
 * 向XML指定位置添加节点<br/>
 * @throws ParserConfigurationException
 * @throws SAXException
 * @throws IOException
 * @throws TransformerException
 */
    public void add2() throws ParserConfigurationException, SAXException,
            IOException, TransformerException {
        //创建解析工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse("");
        // 创建节点
        Element price = document.createElement("售价");
        // 改变节点内容
        price.setTextContent("59.00元");
        // 得到参考节点
        Element refNode = (Element) document.getElementsByTagName("售价").item(0);
        // 得到根节点
        Element bookname = (Element) document.getElementsByTagName("书名")
                .item(0);
        // 往bookename节点的指定位置插入子节点
        bookname.insertBefore(price, refNode);
        // 把更新内存写回到文档
        TransformerFactory trans = TransformerFactory.newInstance();
        Transformer tf = trans.newTransformer();
        tf.transform(new DOMSource(document), new StreamResult(
                new FileOutputStream("path")));
    }

    /**
     * 向XML节点添加属性<br/>
     * @throws ParserConfigurationException
     * @throws SAXException
     * @throws IOException
     * @throws TransformerException
     */
    public void addAttr() throws ParserConfigurationException, SAXException,
            IOException, TransformerException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse("");
        Element bookname = (Element) document.getElementsByTagName("书名")
                .item(0);
        bookname.setAttribute("name", "xxx");
    }
/**
 *  删除节点<br/>
 * @throws ParserConfigurationException
 * @throws SAXException
 * @throws IOException
 * @throws TransformerException
 */
    public void dalete() throws ParserConfigurationException, SAXException,
            IOException, TransformerException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse("");
        // 得到要删除的节点
        Element e = (Element) document.getElementsByTagName("售价").item(0);
        // 得到要删除节点的父节点
        Element book = (Element) document.getElementsByTagName("书").item(0);
        // 父节点删除子节点
        book.removeChild(e);
        // 把更新内存写回到文档
        TransformerFactory trans = TransformerFactory.newInstance();
        Transformer tf = trans.newTransformer();
        tf.transform(new DOMSource(document), new StreamResult(
                new FileOutputStream("path")));
    }

    // 更新售价
    public void update() throws ParserConfigurationException, SAXException,
            IOException, TransformerException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse("");
        Element e = (Element) document.getElementsByTagName("售价").item(0);
        e.setTextContent("109.00元");
        TransformerFactory trans = TransformerFactory.newInstance();
        Transformer tf = trans.newTransformer();
        tf.transform(new DOMSource(document), new StreamResult(
                new FileOutputStream("path")));

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值