zoukankan      html  css  js  c++  java
  • JAVA中通过Jaxp操作XML文件基础

      Java中有多种方式操作XML文件,目前讲一讲以SUN公司提供的DocumentBuilderFactory工厂类对象操作XML。

      使用XML基本操作就是需要CRUD(增删改查),那么首先通过一个查询展示方法来说明JAXP的使用。

     1     public static void run1() throws Exception{
     2         //获取解析器工厂类对象(DocumentBuilderFactory不能直接new,需要调用newInstance()方法创建实例对象)
     3         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
     4         //获取解析器对象(需要有异常捕获 throws Exception)
     5         DocumentBuilder builder = factory.newDocumentBuilder();
     6         //获取XML文档路径,返回document对象(Document有三个包,一定要选org.w3c的,否则报错)
     7         Document document =  builder.parse("src/Demo.xml");
     8         //获取元素对象集合,返回NodeList对象
     9         NodeList nodeList = document.getElementsByTagName("name");
    10         //遍历获得指定节点下的数据NodeList有两个方法,一个getLength()获得当前集合下的元素个数,一个获取指定元素item
    11         for (int i = 0; i < nodeList.getLength(); i++) {
    12             Node node = nodeList.item(i);
    13             //得到元素下的内容/文本使用getTextContent()
    14             System.out.println(node.getTextContent());
    15         }
    16     }

      如果想要插入一个节点元素,使用下列代码(需要上面代码获取到的document 对象;并且,插入的节点元素是插入到document对象中,并没有直接写入xml文件,如果要写入文件还需要回写类支持,稍后会说明)

    1         //通过document对象创建一个元素节点lala
    2         org.w3c.dom.Element element = document.createElement("lala");
    3         //设置元素节点的内容,
    4         ele.setTextContent("中间是内容");
    5         //把创建的节点加入文档
    6         document.appendChild(ele);

      如果想要删除某一个元素节点,使用下列代码:

     1         //---------------------删除----------------
     2         //获得节点的集合
     3         NodeList nodelist = document.getElementsByTagName("add");
     4         //选取目标节点
     5         Node node = nodelist.item(0);
     6 
     7         //获取要删除节点的父节点(必须为父节点)!!!!!!
     8         Node parNode = node.getParentNode();
     9         //通过父节点removeChild删除指定的节点
    10         parNode.removeChild(node);

      知道上述增删查方法了以后,更改某个节点内容相信就更容易了,无非是获得指定的节点,通过setTextContent来更改节点中的文本内容。而对于已经更改了内容的xml对象还是存在内存中,并没有真正体现在文件中,那么怎么重写回xml文件呢?

      如果需要更改xml写回xml文件需要用到TransformerFactory回写类,代码如下:

    1         //创建回写类的工厂类对象
    2         TransformerFactory factory1 =TransformerFactory.newInstance();
    3         //创建回写类
    4         Transformer transform = factory1.newTransformer();
    5         //调用回写类的回写方法,回写XML(注意需要的两个参数,均需new new DOMSource(document对象),new StreamResult("xml路径"))
    6         transform.transform(new DOMSource(document),new StreamResult(""));

      这样,通过以上的方代码就可以把对xml做的操作写回到xml文件中;对于获取xml的document对象和写回类我们发现在很多地方都重复使用,那么久可以把它们封装为一个独立的方法调用,封装后如下(仅用于学习理解,不适用与实际开发):

    public class JAXPDemo {
        /**
         * 通过路径获得xml的Document对象
         * @param path 路径
         * @return
         */
        public static Document GetXMLDocument(String path) throws Exception 
        {
            //获取解析器工厂类对象
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            //获取解析器对象
            DocumentBuilder builder = factory.newDocumentBuilder();
            //加载路径
            Document document =  builder.parse(path);
            return document;
        }
        
        /**
         * 回写方法
         * @param document document对象
         * @param path 指定路径
         * @return 成功ok  失败error
         */
        public static Boolean WriteXmlFile(Document document,String path) 
        {
            //获取重写工厂类TransformerFactory对象
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer former;//创建回写类
            try {
                former = factory.newTransformer();
                //回写
                former.transform(new DOMSource(document), new StreamResult(path));
                return true;//成功
            } catch ( Exception e) {
                return false;//失败
            }
        }
    }

    以上就是基本的JAXP的使用方法

  • 相关阅读:
    cocos2d-X json
    CSS3背景 background-size
    HTML、CSS、meta常用代码
    less相关知识点总结
    使用elementUI滚动条之横向滚动
    text-fill-color:仿苹果官网介绍效果 CSS设置文字渐变效果 文字背景图遮罩
    CSS 解析原理_你知道浏览器CSS是如何解析吗?
    CSS新特性contain,控制页面的重绘与重排
    php使用 header 头下载文件
    Vue单页面应用阻止浏览器记住密码
  • 原文地址:https://www.cnblogs.com/mylydg/p/6344040.html
Copyright © 2011-2022 走看看