使用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.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

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

public class Demo1 {

    /**使用jaxp操作xml文档
     * @param args
     * @throws ParserConfigurationException
     * @throws IOException
     * @throws SAXException
     */
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {

        //1.获取工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        //2.产生解析器
        DocumentBuilder builder = factory.newDocumentBuilder();

        //3.解析xml文档,得到代表文档的document
        Document document = builder.parse(new File("src/book1.xml"));

        //遍历
        list(document);
    }

    //得到售价结点的值
    @Test
    public void read() throws Exception{

        //1.获取工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(new File("src/book.xml"));

        NodeList list = document.getElementsByTagName("售价");
        Node price = list.item(0);

        String value = price.getTextContent();
        System.out.println(value);
    }

    //修改结点的值:<售价>39.00元</售价>改为109
    @Test
    public  void update() throws Exception{

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder  builder = factory.newDocumentBuilder();
        Document document = builder.parse(new File("src/book1.xml"));

        Node price = document.getElementsByTagName("售价").item(0);
        price.setTextContent("109");

        //把内存中的document写到xml文档
        TransformerFactory tf = TransformerFactory.newInstance();
        //得到转换器
        Transformer ts = tf.newTransformer();
        ts.transform(new DOMSource(document), new StreamResult(new File("src/book1.xml")));
    }

    //向指定节点中增加孩子节点(售价节点)
    @Test
    public void add() throws Exception{
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder  builder = factory.newDocumentBuilder();
        Document document = builder.parse(new File("src/book1.xml"));

        //创建需要增加的节点
        Node price = document.createElement("售价");
        price.setTextContent("59元");

        //得到需要增加的节点的父亲
        Node parent = document.getElementsByTagName("书").item(0);

        //把需要增加的节点挂到父结点上
        parent.appendChild(price);

        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer ts = tf.newTransformer();
        ts.transform(new DOMSource(document), new StreamResult(new File("src/book1.xml")));

    }

    //向指定位置上插入售价节点
    @Test
    public void add2() throws Exception{
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder  builder = factory.newDocumentBuilder();
        Document document = builder.parse(new File("src/book1.xml"));

        Node node = document.createElement("售价");
        node.setTextContent("39元");

        Node parent = document.getElementsByTagName("书").item(0);
        parent.insertBefore(node, document.getElementsByTagName("书名").item(0));

        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer ts = tf.newTransformer();
        ts.transform(new DOMSource(document), new StreamResult(new File("src/book1.xml")));
    }

    //删除xml文档的售价结点
    @Test
    public void delete() throws Exception{
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder  builder = factory.newDocumentBuilder();
        Document document = builder.parse(new File("src/book1.xml"));

        Node node = document.getElementsByTagName("售价").item(2);
        node.getParentNode().removeChild(node);
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer ts = tf.newTransformer();
        ts.transform(new DOMSource(document), new StreamResult(new File("src/book1.xml")));
    }

    //操作xml文档属性
    @Test
    public void updateAttribute() throws Exception{
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder  builder = factory.newDocumentBuilder();
        Document document = builder.parse(new File("src/book1.xml"));

        //操作xml文档的元素时,一般都把元素当作node对象,但是程序员如果发现node不好使时,就应把node强转成相应类型
        Node node  = document.getElementsByTagName("书").item(0);
        Element book = null;
        if(node.getNodeType()==Node.ELEMENT_NODE){  //在作结点转换之前,最好先判断结点类型
            book  = (Element)node;
        }

        book.setAttribute("name", "yyyyyyy");
        book.setAttribute("password", "123");
        book.removeAttribute("password");

        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer ts = tf.newTransformer();
        ts.transform(new DOMSource(document), new StreamResult(new File("src/book1.xml")));
    }

    //遍历
    public static void list(Node node){

        if(node.getNodeType()==Node.ELEMENT_NODE){
            System.out.println(node.getNodeName());
        }

        NodeList list = node.getChildNodes();
        for(int i=0;i<list.getLength();i++){
            Node child = list.item(i);
            list(child);
        }
    }

}
时间: 2024-10-22 00:36:36

使用jaxp对比xml进行DOM解析的相关文章

利用jaxp对xml进行dom解析

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

使用jaxp对比xml进行SAX解析

package cn.itcast.sax; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler;

jaxp解析XML之DOM解析

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

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