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

时间: 2024-10-03 13:29:49

Xml---->JAXP DOM解析的相关文章

使用jaxp对比xml进行DOM解析

/*DOM解析编程 •遍历所有节点 •查找某一个节点 •删除结点 •更新结点 •添加节点 /* package cn.itcast.jaxp; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigu

jaxp解析XML之DOM解析

XML解析技术XML解析方式分为三种一种是DOM解析一种是SAX解析 DOM思想:将整个xml加载入内存,形成围挡对象,所有对xml操作都是对内存中节点对象进行,DOM是官方xml解析标准,同时支持解析其他各种语言 SAX解析方式的出现,因为DOM的解析方式需要对文档进行加载入内存,当文档较大的时候比较消耗资源,这时候就出现了SAX解析SAX思想:一边解析,一边处理,一边释放资源 在JDK6中又引入了另一种StAX解析方式是一种拉模式的xml解析方式,而SAX是一种推模式XML解析方式推模式由服

利用jaxp对xml进行dom解析

1 <?xml version="1.0" encoding="UTF-8"?> 2 <书架> 3 <书> 4 <书名>何茂赟自传</书名> 5 <作者>何茂赟</作者> 6 <售价>100.00元</售价> 7 </书> 8 <书> 9 <书名>何茂赟自传2</书名> 10 <作者>何茂赟</

XML(七)-DOM解析

DOM解析 JAXP(Java API for XML Parsing) :用于XML解析的Java API. 本文通过一个实际的代码例子来说明如何用Java提供的DOM相关的类和接口解析XML: 首先,是XML文档:persons.xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE persons [ <!ENTITY xx &quo

XML之DOM解析文档

TestDom.java package com.sxt.dom; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Do

xml语法、DTD约束xml、Schema约束xml、DOM解析xml

今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的html语言,html是超文本标记语言,使用html语言规定好的标签来封装文本数据.而html使用的标签html语言规定好的,每个标签都有自己特定的功能. xml语言,可扩展的标记语言,这门语言它没有定义任何的标记,而标记是由使用者自己来定义,但是由于标签名称以及属性名称都由用户自己来命名,导致别人在使

用java操作XML文件(DOM解析方式)

XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DOM解析方式 在java工程中导入dom4j.jar包. (一)用java读XML文件 <1>创建SAXReader对象. RAXReader reader=new RAXReader(); <2>调用RAXReader的Document read(File file)方法,获取xml文

XML之DOM解析模型

<?xml version= "1.0" encoding = "UTF-8"> <articles> <article category="xml"> <title>XML概述</title> <author>Jerry</author> <email>[email protected]</email> <date>2014-

mybatis 解析配置文件(一)之XML的DOM解析方式

简介 在之前的文章<mybatis 初步使用(IDEA的Maven项目, 超详细)>中, 讲解了mybatis的初步使用, 并总结了以下mybatis的执行流程: 通过 Resources 工具类读取 mybatis-config.xml, 存入 Reader: SqlSessionFactoryBuilder使用上一步获得的reader创建SqlSessionFactory对象; 通过 sqlSessionFactory 对象获得SqlSession; SqlSession对象通过selec

java解析XML① 之DOM解析和SAX解析(包含CDATA的问题)

Dom解析功能强大,可增删改查,操作时会将XML文档读到内存,因此适用于小文档: SAX解析是从头到尾逐行逐个元素解析,修改较为不便,但适用于只读的大文档:SAX采用事件驱动的方式解析XML.如同在电影院看电影一样,从头到尾看一遍,不能回退(Dom可来来回回读取),在看电影的过程中,每遇到一个情节,都会调用大脑去接收处理这些信息.SAX也是相同的原理,每遇到一个元素节点,都会调用相应的方法来处理.在SAX的解析过程中,读取到文档开头.文档结尾,元素的开头和元素结尾都会调用相应方法,我们可以在这些