使用jaxp操作xml文件

#使用jaxp操作xml文件

package com.jaxp.xml;

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.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 java.io.IOException;

/**
 * 实现jaxp操作xml
 */
public class Demo_1 {
    public static void main(String[] args) throws Exception {
//        selectAll();
//        selectOne();
//        addSex();
//        modifySex();
//        delSex();
        listElement();
    }

    //查告第一个name元素的值
    public static void selectOne() throws IOException, SAXException, ParserConfigurationException {
        /**
         * 1.创建解析器工厂
         * 2.根据解析器工厂创建解析器
         * 3.解析xml,返回document
         * 4.得到所有name元素
         * 5.使用返回集合,里面方法item,下标获取具体的元素
         * 6.得到具体的值,使用getTextContent
         */
        //1.创建工厂
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        Document document = builder.parse("XML/src/person.xml");
        NodeList list = document.getElementsByTagName("name");
        System.out.println(list.item(0).getTextContent());
    }

    //查告所有name元素
    public static void selectAll() throws ParserConfigurationException, SAXException, IOException {
        //查告所有name元素 的值
        /*
        1.创建解析器工厂
        2.根据解折器工厂创建解析器
        3.解析xm1返adocument
        */
        //创建解析器工厂
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        //创建解析器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        //解析xml返回document
        Document duument = builder.parse("XML/src/person.xml");
        NodeList list = duument.getElementsByTagName("name");
        for (int i = 0; i < list.getLength(); i++) {
            Node name1 = list.item(i);//得到每一个name元素
            //得到name元素里面的内容
            String s = name1.getTextContent();
            System.out.println(s);
        }
    }

    //在第一个p1末尾添加<sex>女</sex>
    public static void addSex() throws ParserConfigurationException, IOException, SAXException, TransformerException {
        /**
         * 1.创建解析器工厂
         * 2.根据解析器工厂创建解析器
         * 3.解析xml,返回document
         * 4.得到第一个p1
         *  得到所有p1,使用item方法下标得到
         * 5、创建sex标签createElement
         * 6.创建文本createTextNode
         * 7、把文本添加到sex下面 appendChild
         * 8.把sex添加到第一一个p1下面
         * 9.回写xml
         */
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        Document document = builder.parse("XML/src/person.xml");
        NodeList list = document.getElementsByTagName("p1");
        Node p1 = list.item(0);
        Element sex1 = document.createElement("sex");
        Text text1 = document.createTextNode("女");
        sex1.appendChild(text1);
        p1.appendChild(sex1);
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(new DOMSource(document),new StreamResult("XML/src/person.xml"));
    }

    //修改第一个p1sex的内容为男
    public static void modifySex() throws ParserConfigurationException, IOException, SAXException, TransformerException {
        /*
        * 1、创建解析器工厂
        ¥2.根据解析器工厂创建解析器
        * 3.解析xml,近回document
        * 4.得到sex
                item方法
        5、修改seX里面的值setTextContent方法
        6.回写xml
         */
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document document = builder.parse("XML/src/person.xml");
        Node sex1 = document.getElementsByTagName("sex").item(0);
        sex1.setTextContent("男");
        //回写
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.transform(new DOMSource(document),new StreamResult("XML/src/person.xml"));
    }

    //删<sex>nan</sex>节点
    public static void delSex() throws Exception {
        /*
        * 1.创建解析器工厂
        * 2.根据解析器工厂创建解析器
        * 3.解析xml,返回document
        事4、获取sex元素
        * 5.获取sex的父节点
        * 6.娜除使用父节点利除removeChild方法
        * 7.回写xml
        * */
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document document = builder.parse("XML/src/person.xml");
        Node sex1 = document.getElementsByTagName("sex").item(0);
        Node p1 = sex1.getParentNode();
        p1.removeChild(sex1);
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.transform(new DOMSource(document),new StreamResult("XML/src/person.xml"));
    }

    //遍历所有节点
    public static void listElement() throws Exception {
        /**
         * 1.创建解析器工厂
         * 2.根据解析器工厂创建解析器
         * 3.解析xml,返回document
         * 4.得到根节点
         * 5.得到根节点的子节点
         * 6.得到根节点的子节点的子节点
         */
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document document = builder.parse("XML/src/person.xml");

        //编写一个方法来实现遍历
        list1(document);
    }

    //递归遍历的方法
    private static void list1(Node node) {
        if(node.getNodeType()==Node.ELEMENT_NODE){
            System.out.println(node.getNodeName());
        }
        //得到一层子节点
        NodeList list = node.getChildNodes();
        //遍历list
        for (int i = 0; i < list.getLength(); i++) {
            //得到每一个节点
            Node node1 = list.item(i);
            //继续得到node1的子节点
            //node1.getChildNode
            list1(node1);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值