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 编程思想");
        }}
}
   

原文地址:https://www.cnblogs.com/Lanyuxuan/p/5374297.html