java中使用DOM解析xml文件

1、简介

XML文件不受编程语言和操作系统的限制,因此成为了一种通用的数据交互格式。

下面是以DOM方法解析XML文件。DOM解析以文档树的格式将XML文件全部解析到内存中,

因此XML文件的大小将影响到解析时长。


2、代码实操

打开Idea创建项目,在项目下创建student.xml



    
    
        
            
            
        
        
            
            
        
    
    
    
    
        
        
    
    
        
        
    
    

创建类Stu,再对XML文件进行增删改查

1、获取Document对象

Document document=null;
private void getDocument() throws ParserConfigurationException, IOException, SAXException {
    //创建解析器工厂
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    //创建解析器对象
    DocumentBuilder builder = factory.newDocumentBuilder();
    //设置解析的xml文件
    document = builder.parse("student.xml");
}

 2、获取根节点

private void getShowInfo() {
    //获取根节点
    Element root = document.getDocumentElement();
    //获取根节点下的子节点集合
    NodeList childNodes = root.getChildNodes();
    //调用遍历子节点集合的方法
    showChildNodes(childNodes);
}

3、获取所有子节点并输出(展示所有的年级和学生信息)

private void showChildNodes(NodeList childNodes) {
    //遍历子节点集合
    for (int i = 0; i < childNodes.getLength(); i++) {
        //获取父节点下每一个子节点
        Node item = childNodes.item(i);
        //判断该节点类型是否为元素节点。这里可以避免下一步操作因空格符导致的类转换失败
        if(item.getNodeType() == Node.ELEMENT_NODE){
            //将Node类型转换为Element类型
            Element ele = (Element) item;
            //输出标签名称和指定属性值
            System.out.println(ele.getTagName()+"\t"+ele.getAttribute("name"));
            //递归,用于输出所有的子节点
            showChildNodes(ele.getChildNodes());
        }
    }
}

4、 实现向XML文件中添加第三个学生王五

private void addInfo() {
    //创建stu元素节点
    Element stu = document.createElement("stu");
    //为stu元素赋予属性
    stu.setAttribute("name","第三个学生");
    //创建stuNo元素节点
    Element type1 = document.createElement("stuNo");
    //为stuNo元素赋予属性
    type1.setAttribute("name","1003");
    //创建stuName元素节点
    Element type2 = document.createElement("stuName");
    //为stuName元素赋予属性
    type2.setAttribute("name","王五");
    //将stuNo和stuName元素作为子节点放入stu元素节点中
    stu.appendChild(type1);
    stu.appendChild(type2);
    //获取根节点
    Element element= document.getDocumentElement();
    //获取根节点下子节点集合
    NodeList childNodes = element.getChildNodes();
    //遍历子节点集合
    for(int i=0;i

 增删改操作最后都需要进行转换才能真正的实现数据交互

private void save() {
    try {
        //创建转换器工厂对象
        TransformerFactory factory = TransformerFactory.newInstance();
        //创建转换器对象
        Transformer transformer =factory.newTransformer();
        //设置格式(指定转换器是否进行缩进)
        transformer.setOutputProperty(OutputKeys.INDENT,"yes");
        //设置源(解析XML文件的document对象,这里就是student.xml文件)
        DOMSource source = new DOMSource(document);
        //设置目标位置
        StreamResult result = new StreamResult(new File("student.xml"));
        //进行转换
        transformer.transform(source,result);
    } catch (TransformerException e) {
            throw new RuntimeException(e);
    }
}

5、为所有的年级和学生stu加上编号id

private void updateInfo() {
    //获取所有gradeName年级元素节点
    NodeList gradeList = document.getElementsByTagName("gradeName");
    //遍历gradeName年级元素节点集合
    for(int i=0;i

6、 删除张三的学生信息

private void deleteInfo() {
    //获取所有stu学生元素节点
    NodeList stuList = document.getElementsByTagName("stu");
    //遍历stu学生元素节点集合
    for(int i = 0;i

7、最后main方法执行测试

public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
    Stu stu = new Stu();
    stu.getDocument();
    stu.getShowInfo();
    stu.addInfo();
    stu.updateInfo();
    stu.deleteInfo();
}

3、我的完整代码展示

package Homemork.XML;


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 javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.IOException;

public class Stu {
    public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
        Stu stu = new Stu();
        stu.getDocument();
        stu.getShowInfo();
        stu.addInfo();
        stu.updateInfo();
        stu.deleteInfo();
    }

    Document document=null;
    private void deleteInfo() {
        NodeList stuList = document.getElementsByTagName("stu");
        for(int i = 0;i

这是以DOM的方式解析XML文件的基本练习

下期出DOM4j解析XML文件!!!

你可能感兴趣的:(java,java,xml,前端)