XML学习---利用Java对XML文档的增、删、改、查

这是对xml文档解析的第二个课时,通过几天的熟悉和练习。已经可以基本掌握利用java对xml文档的增、删、改、查。
先贴上xml文档代码

<?xml version="1.0" encoding="UTF-8" standalone="no"?><users>
    <user id="A001">
        <name>Jack</name>
        <age>22</age>
    </user>
    <user id="A002">
        <name>张三</name>
        <age>24</age>
    </user>
    <user id="B001">
        <name>小李</name>
        <age>20</age>
    </user>
    <user id="B002">
        <name>小张</name>
        <age>28</age>
    </user>
    <user id="C001">
        <name>刘备</name>
        <age>25</age>
    </user>
</users>


要求:将xml文档中的部分内容按照如下格式输出

id:A001, name:Jack, age:22
----------------------
id:A002, name:张三, age:24
----------------------
id:B001, name:小李, age:20
----------------------
id:B002, name:小张, age:28
----------------------
id:C001, name:刘备, age:35
----------------------

第一步:拿到Document 对象 因为后面都要用到,我抽群成了方法:

// 一个获得xml文档对象的方法
private Document getDom() throws ParserConfigurationException,
            SAXException, IOException {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document dom = db.parse("./xml/users.xml");
        return dom;
    }

获取xml内容 的方法

// 查--遍历
@Test
public void getinfo(){
        try {
            // 拿到dom
            Document dom = getDom();
            // 拿第一个子元素,根 
            Element root = (Element) dom.getFirstChild();
            // 再来找 所有的 user
            NodeList usersList = root.getElementsByTagName("user");

            for(int i=0;i<usersList.getLength();i++){
                //拿到里面的每一个user元素
                Element e = (Element) usersList.item(i);
                // 拿user元素里面的 id 属性
                String id = e.getAttribute("id");
                // 拿 name 的 文本内容
                String name = e.getElementsByTagName("name").item(0).getTextContent();
                // 拿 age 的 文本内容
                String age = e.getElementsByTagName("age").item(0).getTextContent();

                String str = "id:"+id+",name:"+name+",age:"+age;

                System.out.println(str);
                System.out.println("-------------------");

            }


        } catch (Exception e) {
            e.printStackTrace();
        }


    }

结果如下:
这里写图片描述

//改  ---需求:把最后一个user的年龄改为 age+10 
    @Test
    public void changeAge (){
        try {
            // 拿到 dom
        /*  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document dom = db.parse(new File("./xml/users.xml"));*/
            Document dom = getDom();
            // 拿到最后一个user的age,并且年龄加10
            Element root = (Element) dom.getFirstChild();
            NodeList usersList = root.getElementsByTagName("user");
            Element lastuser = (Element) usersList.item(usersList.getLength()-1);
            Element age = (Element) lastuser.getElementsByTagName("age").item(0);
            age.setTextContent( Integer.parseInt(age.getTextContent())+10+"");
            //保存,把内存中操作的结果保存到 文档(硬盘)中
        TransformerFactory tfF = TransformerFactory.newInstance();
        Transformer tf = tfF.newTransformer();
        tf.transform(new DOMSource(dom), new StreamResult("./xml/users.xml"));
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

当改成功后MyEclipse会提示是否要重新加载信息
这里写图片描述
user.xml修改后代码如下

<?xml version="1.0" encoding="UTF-8" standalone="no"?><users>
    <user id="A001">
        <name>Jack</name>
        <age>22</age>
    </user>
    <user id="A002">
        <name>张三</name>
        <age>24</age>
    </user>
    <user id="B001">
        <name>小李</name>
        <age>20</age>
    </user>
    <user id="B002">
        <name>小张</name>
        <age>28</age>
    </user>
    <user id="C001">
        <name>刘备</name>
        <age>35</age>
    </user>
</users>

保持到xml文档的方法后面会多次用到故,也抽取出来

private void saveDom(Document dom)
            throws TransformerFactoryConfigurationError,
            TransformerConfigurationException, TransformerException {
        //保存,把内存中操作的结果保存到 文档(硬盘)中
        TransformerFactory tfF = TransformerFactory.newInstance();
        Transformer tf = tfF.newTransformer();
        tf.transform(new DOMSource(dom), new StreamResult("./xml/users.xml"));
    }

剩下的增加。删除也类似,就是调用的方法不用,我把争端代码贴上。

package cn.hncu.jaxp.dom;

import java.io.File;
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.TransformerFactoryConfigurationError;
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.NodeList;
import org.xml.sax.SAXException;
/**
 * XML学习---利用Java对XML文档的增、删、改、查
 * @author<a href="mailto:953801304@qq.com">胡龙华</a>
 * @version 2017-5-27  下午1:26:44
 * @fileName DomDemo2.java
 */

public class DomDemo2 {
    // 用Java对xml文档进行CRUD---增删改查
    // 查--遍历
    @Test
    public void getinfo(){
        try {
            // 拿到dom
            Document dom = getDom();
            // 拿第一个子元素,根 
            Element root = (Element) dom.getFirstChild();
            // 再来找 所有的 user
            NodeList usersList = root.getElementsByTagName("user");

            for(int i=0;i<usersList.getLength();i++){
                //拿到里面的每一个user元素
                Element e = (Element) usersList.item(i);
                // 拿user元素里面的 id 属性
                String id = e.getAttribute("id");
                // 拿 name 的 文本内容
                String name = e.getElementsByTagName("name").item(0).getTextContent();
                // 拿 age 的 文本内容
                String age = e.getElementsByTagName("age").item(0).getTextContent();

                String str = "id:"+id+",name:"+name+",age:"+age;

                System.out.println(str);
                System.out.println("-------------------");

            }


        } catch (Exception e) {
            e.printStackTrace();
        }


    }
    private Document getDom() throws ParserConfigurationException,
            SAXException, IOException {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document dom = db.parse("./xml/users.xml");
        return dom;
    }
    //改  ---需求:把最后一个user的年龄改为 age+10 
    @Test
    public void changeAge (){
        try {
            // 拿到 dom
        /*  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document dom = db.parse(new File("./xml/users.xml"));*/
            Document dom = getDom();
            // 拿到最后一个user的age,并且年龄加10
            Element root = (Element) dom.getFirstChild();
            NodeList usersList = root.getElementsByTagName("user");
            Element lastuser = (Element) usersList.item(usersList.getLength()-1);
            Element age = (Element) lastuser.getElementsByTagName("age").item(0);
            age.setTextContent( Integer.parseInt(age.getTextContent())+10+"");
            saveDom(dom);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    //增  ---需求: 给文档添加一个新的<user>节点
    @Test
    public void addElement(){
        try {
            Document dom = getDom();
            //先建立好需要添加的user字樹
            Element addUser = dom.createElement("user"); // <user></user>
            // 添加user的屬性 
            addUser.setAttribute("id", "DG001");  // <user id="DG001"></user>
            // 创建user下的name 和  age 节点
            Element name = dom.createElement("name");
            Element age = dom.createElement("age");
            // 对name、age进行赋值
            name.setTextContent("达哥");
            age.setTextContent("20");
            // 把 name、age节点加到user节点上
            addUser.appendChild(name);
            addUser.appendChild(age);
            // 把user 加到dom树的根上去
            dom.getFirstChild().appendChild(addUser);

            saveDom(dom);



        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    private void saveDom(Document dom)
            throws TransformerFactoryConfigurationError,
            TransformerConfigurationException, TransformerException {
        //保存,把内存中操作的结果保存到 文档(硬盘)中
        TransformerFactory tfF = TransformerFactory.newInstance();
        Transformer tf = tfF.newTransformer();
        tf.transform(new DOMSource(dom), new StreamResult("./xml/users.xml"));
    }
    //删除  ---需求: 把最后的<user>节点删除了
    @Test
    public void removeUser(){
        try {
            // 拿到dom 和 保存。。。  调用方法把 我写了好多遍了
            Document dom = getDom();
            // 拿到最后一个 user节点
            NodeList usersList = dom.getElementsByTagName("user");
            Element lastUser = (Element) usersList.item(usersList.getLength()-1); 
            // 调用 父节点 删除自己
            lastUser.getParentNode().removeChild(lastUser);
            // baoc
            saveDom(dom);

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值