• jaxp的dom方式操作(查找、添加、修改、删除、遍历节点)


    package cn.itcast.jaxptest;

    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.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;

    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.w3c.dom.Text;
    import org.xml.sax.SAXException;

    public class TestJaxp {

    public static void main(String[] args) throws Exception {
    //selectAll();
    //selectSin();
    //addSex();
    //modifySex();
    //delSex();
    listElement();
    }


    //查询所有name元素的值
    private static void selectAll() throws ParserConfigurationException, SAXException, IOException {
    //查询所有name元素的值
    /*
    *步骤:
    *1、创建解析器工厂
    *2、根据解析器工厂创建解析器
    *3、解析xml返回document
    */
    //创建解析器工厂
    DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
    //创建解析器
    DocumentBuilder builder=builderFactory.newDocumentBuilder();
    //解析xml返回的document
    Document document=builder.parse("person.xml");
    //得到name元素
    NodeList list=document.getElementsByTagName("name");
    //遍历集合
    for(int i=0;i<list.getLength();i++){
    Node name1=list.item(i);//得到里面name元素
    String name=name1.getTextContent();//得到name元素的值

    System.out.println(name);
    }
    }

    //查询xml中第一个name元素的值
    public static void selectSin() throws Exception{
    /*
    * 1、创建解析器工厂
    * 2、根据解析器工厂创建解析器
    * 3、解析xml,返回document
    * 4、得到所有name元素
    * 5、使用返回集合,里面方法item,下标获取具体的元素
    * 6、得到具体的值,使用getTextContent方法
    *
    */

    //1、创建解析器工厂
    DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();

    //2、根据解析器工厂创建解析器
    DocumentBuilder builder=builderFactory.newDocumentBuilder();

    //3、解析xml,返回document
    Document document=builder.parse("person.xml");

    //4、得到所有name元素
    NodeList list=document.getElementsByTagName("name");

    //5、使用集合里面的方法item,下标获取元素
    Node node=list.item(0);
    String name=node.getTextContent();
    System.out.println(name);
    }


    //添加节点,在第一个p1下面添加一个sex女
    public static void addSex() throws Exception{
    /*
    *1、创建解析器工厂
    *2、创建解析器
    *3、解析xml,返回document
    *4、得到第一个p1
    * -得到所有p1,使用item方法下标得到
    *5、创建sex标签createElement
    *6、创建文本createTextNode
    *7、把文本添加到sex下面appendChild
    *8、把sex添加到第一个p1下面
    *9、回写xml,让写入文件生效
    * --创建TransformerFactory对象:
    * --创建Transformer对象
    * --transform.
    *
    *
    */
    //1、创建解析器工厂
    DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
    //2、创建解析器
    DocumentBuilder builder=builderFactory.newDocumentBuilder();
    //3、解析xml,返回document
    Document document=builder.parse("person.xml");
    //4、得到第一个p1
    Node p1=document.getElementsByTagName("p1").item(0);
    //5、创建sex标签createElement
    Element sex1=document.createElement("sex");
    //6、创建文本createTextNode
    Text text1=document.createTextNode("nv");
    //7、把文本添加到sex下面appendChild
    sex1.appendChild(text1);
    //8、把sex1添加到p1下面
    p1.appendChild(sex1);
    //9、回写
    TransformerFactory factory=TransformerFactory.newInstance();
    Transformer transformer=factory.newTransformer();
    //transformer.transform(new DOMSource(document) , new StreamResult("person.xml"));
    //操作文件需要用流,
    transformer.transform(new DOMSource(document) , new StreamResult("person.xml"));

    }

    //使用jaxp修改节点
    //修改第一个<sex>nan</sex>
    public static void modifySex() throws Exception{
    //1、创建解析器工厂
    //2、创建解析器
    //3、解析xml,得到document
    //4、得到sex item方法
    //5、修改sex里面的值setTextContent方法
    //6、回写xml


    //创建解析器工厂
    DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
    //2、创建解析器
    DocumentBuilder documentBuilder=builderFactory.newDocumentBuilder();
    //3、解析xml,得到document
    Document document=documentBuilder.parse("person.xml");
    //4、得到sex节点
    Node sex1=document.getElementsByTagName("sex").item(0);
    //5、设置sex的值
    sex1.setTextContent("nan");
    //6、回写
    TransformerFactory factory=TransformerFactory.newInstance();
    Transformer transformer=factory.newTransformer();
    //把内存中的东西,写到文件中
    transformer.transform(new DOMSource(document), new StreamResult("person.xml"));


    }

    //使用jaxp删除节点
    //删除<sex></sex>

    public static void delSex() throws Exception{
    /**
    * 1、创建解析器工厂
    * 2、创建解析器
    * 3、解析xml,得到document
    * 4、获取sex元素
    * 5、获取sex的父节点
    * 6、使用父节点删除子节点removeChild
    * 7、回写
    */
    //1、创建解析器工厂
    DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
    //2、创建解析器
    DocumentBuilder builder=builderFactory.newDocumentBuilder();
    //3、解析xml,得到document
    Document document=builder.parse("person.xml");
    //4、获取sex元素
    Node sex=document.getElementsByTagName("sex").item(0);
    //5、获取sex父节点
    Node parent=sex.getParentNode();
    //6、使用父节点删除子节点
    parent.removeChild(sex);
    //7、回写
    TransformerFactory factory=TransformerFactory.newInstance();
    Transformer transformer=factory.newTransformer();
    transformer.transform(new DOMSource(document), new StreamResult("person.xml"));


    }

    //使用jaxp遍历节点
    public static void listElement() throws Exception{
    /**
    * 1、创建解析器工厂
    * 2、创建解析器
    * 3、解析xml,得到document
    *
    * 递归方法实现
    * 4、得到根节点
    * 5、得到根节点子节点
    * 6、得到根节点子节点的子节点
    */
    //1、创建解析器工厂
    DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
    //2、创建解析器
    DocumentBuilder builder=builderFactory.newDocumentBuilder();
    //3、解析xml文件,获得document
    Document document= builder.parse("person.xml");
    //递归实现得到根节点子节点
    listNode(document);

    }
    //递归遍历,递归就是自己调自己
    public static void listNode(Node node){
    //判断是元素类型时候才打印
    if(node.getNodeType()==Node.ELEMENT_NODE){
    //打印元素名字
    System.out.println(node.getNodeName());
    }
          
    }
    }

  • 相关阅读:
    Maven
    Mybatis
    WinDbg的安装、配置和功能(转发)
    gRPC —— gRPC 基础: C#(待续)
    gRPC —— 通讯协议
    gRPC —— 安全认证
    gRPC —— 概念
    gRPC —— 概览
    grpc和protocol buffer介绍&实例(转载)
    protocol buffers ——git 源码
  • 原文地址:https://www.cnblogs.com/xiqoqu/p/9071363.html
Copyright © 2020-2023  润新知