DomXML解析

package main.demo;

import main.util.OperateDOM;
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;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;

/**
 * Created by QXJJ1697 on 2017/4/21.
 */
public class DOMparseDemo {
    public static void main(String[] args) {
        OperateDOM operateDOM = new OperateDOM();
        Document document = operateDOM.common("src/xml/student.xml");
        //operateDOM.add(document,"src/xml/student.xml");
        //operateDOM.read(document);
        //operateDOM.update(document,"src/xml/student.xml");
        operateDOM.delete(document,"src/xml/student.xml");
        operateDOM.read(document);
    }
}
package main.util;

import org.w3c.dom.*;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;

/**
 * Created by QXJJ1697 on 2017/4/26.
 */
public class OperateDOM {

    public Document common(String uri){
        Document document = null;
        //创建解析器工厂对象
        DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
        try {
            //解析器工厂对象创建解析器对象
            DocumentBuilder db = dbf.newDocumentBuilder();
            //解析器对象指定XML文件创建Document对象
            document = db.parse(uri);
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return document;
    }
    //读取
    public void read(Document document){
        //以Document对象为起点操作DOM树
        NodeList student = document.getElementsByTagName("student");
        //查询
        for(int i = 0;i < student.getLength(); i++){
            Node stu = student.item(i);
            //获取所有name属性集合 不知道属性名和属性个数·
            NamedNodeMap attrs = stu.getAttributes();
            //遍历student的属性
            for(int j = 0; j < attrs.getLength(); j++){
                Node attr = attrs.item(j);
                System.out.print("属性:"+attr.getNodeName());
                System.out.println("属性值:"+attr.getNodeValue());
            }
            //已经知道属性个数和属性名
            //Element element = (Element)stu;
            //获取标签元素属性值
           // System.out.println(element.getAttribute("name"));
            //获取标签元素名称
            //System.out.println(element.getNodeName());
            //获取标签元素文本内容
            //System.out.println(element.getTextContent());
            //NodeList childs = element.getChildNodes();
//            for(int j = 0;j < childs.getLength(); j++ ){
//                Node child = childs.item(j);
//                //此处对node需要进行判断,因为getChildNodes()方法会将空白换行符也当做一个节点
//                if(child.getNodeType() == Node.ELEMENT_NODE){
//                    Element ele = (Element)child;
//                    System.out.println(ele.getNodeName());
//                    //System.out.println(ele.getAttribute("id"));
//                    //System.out.println(ele.getAttribute("score"));
                        //System.out.println(ele.getFirstChild().getNodeValue());
//                    System.out.println(ele.getTextContent());
//                }
//            }
        }
    }

    //插入
    public void add(Document document,String uri){
        Element stu = document.createElement("student");
        stu.setAttribute("name","王二麻子");
        Element grade = document.createElement("garde");
        grade.setAttribute("id","004");
        grade.setTextContent("二年级");
        Element number = document.createElement("number");
        number.setAttribute("score","85");
        number.setTextContent("4");
        stu.appendChild(grade);
        stu.appendChild(number);
        document.getElementsByTagName("students").item(0).appendChild(stu);
        this.save(document,uri);
    }

    //修改
    public void update(Document document,String uri){
        NodeList student = document.getElementsByTagName("student");
        for(int i = 0 ;i < student.getLength(); i++ ){
            Node stu = student.item(i);
            Element ele = (Element)stu;
            if(ele.getAttribute("name").equals("张三")) {
                ele.setAttribute("name", "长泽雅美");
                this.save(document,uri);
            }
        }
    }

    //删除
    public void delete(Document document,String uri){
        NodeList student = document.getElementsByTagName("student");
        for(int i = 0 ;i < student.getLength(); i++ ){
            Node stu = student.item(i);
            Element ele = (Element)stu;
            if(ele.getNodeType() == Node.ELEMENT_NODE) {
                //System.out.println("delete"+ele.getAttribute("name"));
                if (ele.getAttribute("name").equals("王二麻子")) {
                    ele.getParentNode().removeChild(ele);
                    this.save(document,uri);
                }
            }
        }
    }
    //保存
    private void save(Document document,String uri){
        try {
            TransformerFactory tf = TransformerFactory.newInstance();
            //缩进
            tf.setAttribute("indent-number",5);
            Transformer t = tf.newTransformer();
            t.setOutputProperty(OutputKeys.ENCODING,"utf-8");
            t.setOutputProperty(OutputKeys.INDENT,"yes");
            DOMSource ds = new DOMSource(document);
            StreamResult sr = new StreamResult(new OutputStreamWriter(new FileOutputStream(uri),"UTF-8"));
            t.transform(ds,sr);
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<students>
	<student name="长泽雅美">
		<grade id="001">二年级</grade>
		<number score="80">1</number>
	</student>
	<student name="李四">
		<grade id="002">二年级</grade>
		<number score="88">2</number>
	</student>
	<student name="王五">
		<grade id="003">二年级</grade>
		<number score="90">3</number>
	</student>
</students>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值