• Document树的解析方法


    一、本次总结用到的xml文本

        1、    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
            <!-- 引进dtd文件的标签 --><!-- <!DOCTYPE 书架 SYSTEM "book.dtd"> -->
            <书架>
                <书 ISBN="a" 出版社="人民出版社">
                    <书名>三国演义</书名>
                    <作者>罗贯中</作者>
                    <批发价>500¥</批发价>
                    <售价>100$</售价>
                </书>
                <书 ISBN="b" 出版社="人民出版社">
                    <书名>西游记</书名>
                    <作者>吴承恩</作者>
                    <售价>55¥</售价>
                </书>
            </书架>
    二、利用jaxp进行DOM的解析方法
        1、首先获得解析工厂DOcumentBuilderFactory
            javax.xml.parsers 类
            
            **DocumentBuilderFactory:定义工厂API,使应用程序能够从xml文档获取生成DOM对象的解析器。

            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            
            **newInstance()方法:获取DocumentBuilderFactory的新实类。此static方法创建一个新的工厂实类。
        2、得到解析器DocumentBuilder
            类 DocumentBuilder
            **定义API,使其从xml文档中DOM文档实类。应用程序员可以从xml获取一个Document
            
            DocumentBuilder builder = factory.newDocumentBuilder();
            
            **newDocumentBuilder:使用当前配置的参数创建一个新的DocumentBuilder实类。
            
        3、解析制定的xml文档。得到代表内存的Dom树的Document对象
            
            Document document = builder.parse("src/book.xml");
            **builder.parse()方法:将给定输入源的内容解析为一个xml文档。并返回一个新的DOM document对象

    三、得到某个具体节点的内容:列如:打印第二本书的作者
        1、根据标签的内容获取所有的作者名称
            NodeList nodelist=document.getElementsBytagName()
            NodeList:接口提供对节点的有序集合的抽象
        2、按照索引获取第二个作者元素
            Node node=nodelist.item(1);
        3、打印该元素的文本
            String text=node.getTextContent();
            System.out.println(text);
    四、遍历所有的元素节点:打印元素的节点名称
        1、判断当前节点是否为一个元素节点
            short nd=node.getNodeType();
            if(nd==Node.ELEMENT_NODE){
            如果是:打印元素节点的名称
            system.out.println(node.getNodeName());
            }
            如果不是找到他们的孩子节点
            NodeList nodelist=node.getChildNodes();
            int length=nodelist.getLength();//获取孩子节点的长度
            for(int 1=0;i<length;i++){
            //遍历孩子节点进行递归
            Node n=nodelist.item(i);
            test2(n);
            }
    五、修改元素节点的主题内容
        1、列如:找到第一本书的售价
            NodeList nodelist = docuement.getElementsByTagName("售价");
        2、设置其主题内容
            Node no=nodelist.item(0);//得到他的节点
            no.setTextContent("100$");//设置他的主题内容
        3、把内存中的document树写回到xml中
            TransformerFactory  factory = TransformerTactory.newInstance();
            Transformer tr = factory.newTransformer();
            tr.transformer(new DOMSource(doument),new StreamResult("src/book.xml"));
    六、向指定元素节点中增加子元素节点
        1、创建一个新元素并设置其内容
            Element element = Element.createElement("内部价");
            设置他的文本内容
            element.setTexstContent("300$");
        2、找到第一本书
            NodeList nodelist = document.getElementsByTagName("书");
            Node first =nodelist.item(0);
        3、把新节点挂到第一本书上
            first.appendChild(element)
        4、把内存中的document树写会到xml中
            TransformerFactory factory = TransformerFactory.newInstace();
            Transformer tr=factory.newTransformer();
            tr.transformer(new DOMSource(document),new StreamResult("src/book.xml"));
    七、向指定的元素节点上增加同级元素节点:列如:在第一本书的售价前面添加批发价
        1、创建并设置其主题内容
            Element element = documcnet.createElement("批发价");
            element.setTextContent("500$");
        2、找到第一本书的售价
            NodeList nodelist = document.getElementsByTagName("售价");
            Node node=nodelist.item(0);
         3、在售价的前面添加新建的元素:
            ***增加子节点,一定要使用父元素进行
            node.getParentNode().insertBefore(element,node);
        4、把内存中的document树写回到xml中
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer tr = factory.newTransformer()
            tr.transformer(new DOMSource(document),new StreamResult("src/book.xml"));
    八、删除指定元素的节点
        1、删除子节点需要父节点进行删除
            列如:找到内部价进行删除
            NodeList nodelist = document.getElementsByTagName("内部价");
             Node node = nodelist.item(0);
             node.getPraentNode().removeChhild(n);
        2、把内存的document树写回到xml中
            TransformerFactory factory=TransformerFactory.newInstance();
            Transformer tr=factory.Transformer();
            tr.transformer(new DOMSource(document),new StreamResult("src/book.xml"));
    九、操作xml元素属性:打印第一本书的出版社
        1、首先得到第一本
            Node node = document.getElementsByTagName("书").item(0);
        2、打印指定属性的值
            Element e = (Element)n;
            system.out.println(e.getAttribute("出版社"));











  • 相关阅读:
    BSOJ 4490 避难向导
    【水题】求条件最大值
    【模拟】神奇的树
    【模拟】2014ACM/ICPC亚洲区北京站-A-(Curious Matt)
    【模拟】refresh的停车场
    数据结构实验之栈三:后缀式求值 (stack)
    【STL】Message Flood(set)
    【STL】完美网络(优先队列实现)
    【搜索BFS】走迷宫(bfs)
    【STL】deque双向队列(转载)
  • 原文地址:https://www.cnblogs.com/XMMDMW/p/5267300.html
Copyright © 2020-2023  润新知