zoukankan      html  css  js  c++  java
  • Xml---->JAXP DOM解析

    一、JAXP DOM解析  javax.xml.parsers
        1、获得document对象
            //获得实例工厂   *javax.xml.parsers.DocumentBuilderFactory
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            //获得解析  *javax.xml.parsers.DocumentBuilderFactory
            DocumentBuilder builder = factory.newDocumentBuilder();
            //获得document --解析xml文档   java.io.FileNotFoundException    *org.w3c.dom.Document
            Document document = builder.parse("books.xml");  //指java项目的根路径下的文件
            Document document=builder.parse(new File("Webcontent/orderstotal.xml")) //将给定文件的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象
            
        2、获得需要的内容:获得所有的书籍
            //获得所有的书籍元素
            NodeList bookElements = document.getElementsByTagName("book");
            //遍历书籍元素的集合得到单个book元素
            for(int i=0;i<bookElements.getLength();i++){
                Element bookElement=bookElements.item(i);
            //获得书籍的id属性的值
            String id=bookElement.getAttribute("id");
            //获得price子节点
            //在已知只有一个price节点时可以这么获取
            Node price=bookElement.getElementsByTagName("price").item(0);
            //获得price节点的值
            //1、getTextContent此属性返回此节点及其后代的文本内容* 例如:<book><title>Java</title><price>2</price></book>   --> 返回字符串"java 2"
            //2、getNodeValue 此节点的值
            String priceText=price.getTextContent();
            String priceText=price.getFirstChild().getNodeValue();
        
            //获得相关书籍集合
            NodeList relationbooks=bookElement.getElementsByTagName("relationbook");
            
            }

        3、遍历
            * 获得长度
                bookElements.getLength()
            * 获得指索引的节点
                bookElements.item(i);
            * 通过元素获得,当前元素指定的属性
                Element.getAttribute("id");
            * 获得当前节点的名称
                Node.getNodeName();
            
                    
                    
    二、保存
        //获得持久化对象实例工厂
        TransformerFactory factory = TransformerFactory.newInstance();
        
        //获得持久化对象
        Transformer transformer = factory.newTransformer();
        //将内存数据,保存到硬盘
        
        //源:document  将document封装到Source
        Source xmlSource = new DOMSource(document);
        ****1、保存为文件StreamResult(File f) -----》从 File 构造 StreamResult。
        //结果:books.jasp.xml  将“文件路径”封装到Result
        Result outputTarget = new StreamResult("books.jasp.xml");
        *****2、StreamResult(Writer writer)-----》 从字符流构造 StreamResult
        //结果返回一个字符流
        StringWriter stringWriter = new StringWriter();
        Result outputTarget= new StreamResult(stringWriter);
        transformer.transform(xmlSource, outputTarget);
    三、创建一个新的DOM
        //获得实例工厂   *javax.xml.parsers.DocumentBuilderFactory
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        //获得解析  *javax.xml.parsers.DocumentBuilderFactory
        DocumentBuilder builder = factory.newDocumentBuilder();
        // 获取 DOM Document 对象的一个新实例来生成一个 DOM 树
        Document newDom=builder.newDocument()
        //创建元素
        Element newRoot=newDom.creatElement("books");
        //将newRoot设置为根元素
        newDom.appendChild(newRoot);
        //创建book元素
        Element newBook=newDom.creatElement("book");
        //为book元素设置属性
        newBook.setAttribute("id","1");
        //为元素添加文本
        1、newBook.setTextContent("java");
        2、newBook.appendChild(newdoc.createTextNode("java"));
    四、删除、修改、增加


        /*
     * 删除
     */
    public static void delete(Document document){
        /*操作:删除
         * ---><book id="003">的id属性删除
        */
        //获得booklist
        NodeList booklist=document.getElementsByTagName("book");
        //遍历booklist
        for(int i=0;i<booklist.getLength();i++){
            Element book=(Element) booklist.item(i);
            
            String id=book.getAttribute("id");
            
            if("003".equals(id)){
                //删除属性节点
                book.removeAttribute("id");
                book.removeAttributeNode(book.getAttributeNode("id"));
                //删除节点
    //            Element parent=(Element)book.getParentNode();
    //            parent.removeChild(book);
                
            }
        }
        
        
    }
    /*
     * 增加
     */
    public static void create(Document document){
        /*操作:增加
         * ---><book id="003">
                    <title>java</title>
                    <price>66</price>
                </book>
        */
        //获得根节点
        Element root=document.getDocumentElement();
        //创建book节点
        Element book=document.createElement("book");
        //设置id属性
        book.setAttribute("id", "003");
        //创建title节点
        Element title=document.createElement("title");
        //设置title的内容
        title.setTextContent("eclipse");
        //增加title子节点
        book.appendChild(title);
        //创建price节点
        Element price = document.createElement("price");
        // 设置price的内容
        price.setTextContent("66");
        // 增加price子节点
        book.appendChild(price);
        //为根节点增加book子节点
        System.out.println(price);

        
        root.appendChild(book);
        
    }
        
    /*
     * 修改
     */
    public static void update(Document document){

        /*操作:修改
         * --->将<book id="001">
                    <title>thinking in java</title>
                    <price>98</price>
                 </book>
                 修改为<title>java 编程思想</title>
        */
        //1、获得book子节点集合
        NodeList booklist=document.getElementsByTagName("book");
        //遍历booklist
        for(int i=0;i<booklist.getLength();i++){
            Element book=(Element)booklist.item(i);
            //id="001"的book
            System.out.println(book.getAttribute("id"));
            if("001".equals(book.getAttribute("id"))){
            NodeList titlelist=book.getElementsByTagName("title");
            Element title=(Element)titlelist.item(0);
            System.out.println(title.getTextContent());
            title.setTextContent("java 编程思想");
            }}
    }
       

  • 相关阅读:
    R学习之——R用于文本挖掘(tm包)
    【转】基于LDA的Topic Model变形
    Windows操作系统实习之读者写者问题
    应用《开场白》ios源码分享
    一个美式英语发音的app开源
    20款优秀的移动产品原型和线框图设计工具
    sqlite 数据库在ios中的使用
    28个UI免费漂亮的切换开关PSD下载
    ios应用程序生命周期
    Ludei HTML5平台将于今年夏季支持WebGL 3D技术
  • 原文地址:https://www.cnblogs.com/Lanyuxuan/p/5374297.html
Copyright © 2011-2022 走看看