xml的增删改查,使用dom解析

在java中,javax.xml.transform包中的transformer类用于xml文件的document对象转换为xml格式进行输出
在学习增删改查之前,我们先要了解xml的回写技术
1.对xml文档进行加载
2.回写xml,使用transfromer

首先我们要创建xml文档,具体如下:

<?xml version="1.0" encoding="UTF-8"?>



<books>

  <book>

        <name> 高效java </name>

        <pirce>50 </pirce>

    </book>

    <book>

        <name>  java编程思想  </name>

            <pirce> 80  </pirce>

    </book>



</books>  

下面是   java代码            
                                     

/**
 * 
 */
package com.effective_java;

import java.io.File;
import java.util.jar.Attributes.Name;

import javax.lang.model.element.Element;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.NodeList;

/**
 * 这段代码的作用是对于xml的增删该改查,使用的dom解析的方式
 *
 */
public class Model6 {

    public static void main(String[] args) throws Exception {

        //

        File file = new File("value1\\model.xml");
        // TODO 自动生成的方法存根
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();

        org.w3c.dom.Document document = builder.parse("value\\NewFile.xml");
        // 前三句是将文件加载到内存

        org.w3c.dom.Element newbook = document.createElement("book");// 创建了一个元素

        org.w3c.dom.Element root = document.getDocumentElement();

        root.appendChild(newbook);

        TransformerFactory transformerFactory = TransformerFactory.newInstance();

        Transformer transformer = transformerFactory.newTransformer();

        DOMSource domSource = new DOMSource(document);

        StreamResult streamResult = new StreamResult(file);

        transformer.transform(domSource, streamResult);
        // 最后实现回写

        // 好的现在我们更改需求,对book增加子标签<name>可以这么坐
        org.w3c.dom.Element bookname = document.createElement("name");
        bookname.setTextContent("java编程词典");
        newbook.appendChild(bookname);

        transformer.transform(domSource, streamResult);// 回写

        // 那么现在 我们再次学习设置新加入元素的属性
        newbook.setAttribute("id", "text");

        transformer.transform(domSource, streamResult);// 回写

        // 接着我们对元素进行修改分下面几步
        // .查询到指定元素(1:修改属性的值2:修改文本内容)
        /**
         * 1加载资源 2得到相应节点 3回写 上面的加载资源和回写我们已经实现过了,现在我们都只是实现其关键部分
         */
        // 在这个例子中,我们以对书籍的pirce进行修改,将java编程思想价格降低到以前的80%;
        NodeList nodeList = document.getElementsByTagName("name");// 获取到元素节点
        for (int i = 0; i < nodeList.getLength(); i++) {
            org.w3c.dom.Element element = (org.w3c.dom.Element) nodeList.item(i);
            if (element.getTextContent().equals("java编程思想")) {
                // 在xml中,我们可以看到pirce元素是element的兄弟的兄弟
                org.w3c.dom.Element pirce = (org.w3c.dom.Element) element.getNextSibling().getNextSibling();
                double d = Double.parseDouble(pirce.getTextContent());
                String string = Double.toString(d * 0.8);
                pirce.setTextContent(string);
                System.out.println(d);
                transformer.transform(domSource, streamResult);// 回写
            }
        }
      //在实现了元素的修改过后,我们再来是想元素的删除工作,在删除中,
        //只能通过父亲节点删除子节点,所哟我们要直接找到被删除节点的父节点
        //然后才能进新删除
    /**
     * 同样,我们也要加载到内存,然后进行查找,最后进行删除
     * 在这里,我们以实现删除带有java字样的节点元素
     */
        NodeList no=document.getElementsByTagName("name");//进行全局定位,找到name节点
        for(int i=0;i<no.getLength();i++){
            org.w3c.dom.Element element1=(org.w3c.dom.Element)no.item(i);
            if(element1.getTextContent().contains("java")){
                              org.w3c.dom.Element element3=(org.w3c.dom.Element)element1.getParentNode();
                              element3.getParentNode().removeChild(element3);
                              i--;//对i进行修正
            }
            transformer.transform(domSource, streamResult);// 回写
        }

    }

}
//本文章为原创,如果有任何问题,请与本人联系
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值