JAVA操作XML实例分析

 更新时间:2015年03月13日 08:59:14   作者:疯狂的流浪  
这篇文章主要介绍了JAVA操作XML的方法,实例分析了java操作XML文件的常用技巧,需要的朋友可以参考下

本文实例讲述了JAVA操作XML的方法。分享给大家供大家参考。具体如下:

java代码如下:

复制代码 代码如下:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.*;
import javax.xml.xpath.*;
public class Test {
    public static void main(String[] args) {
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
        Element theBook=null, theElem=null, root=null;
        try {
            factory.setIgnoringElementContentWhitespace(true);
            DocumentBuilder db=factory.newDocumentBuilder();
            Document xmldoc=db.parse(new File("Test1.xml"));
            root=xmldoc.getDocumentElement();
            theBook=(Element) selectSingleNode("/books/book[name='哈里波特']", root);
            System.out.println("--- 查询找《哈里波特》 ----");
            Element nameNode=(Element)theBook.getElementsByTagName("price").item(0);
            String name=nameNode.getFirstChild().getNodeValue();
            System.out.println(name);
            output(theBook);
            System.out.println("=============selectSingleNode(books/book[name='哈里波特'], root)==================");
            //--- 新建一本书开始 ----
            theBook=xmldoc.createElement("book");
            theElem=xmldoc.createElement("name");
            theElem.setTextContent("新书");
            theBook.appendChild(theElem);
            theElem=xmldoc.createElement("price");
            theElem.setTextContent("20");
            theBook.appendChild(theElem);
            theElem=xmldoc.createElement("memo");
            theElem.setTextContent("新书的更好看。");
            theBook.appendChild(theElem);
            root.appendChild(theBook);
            System.out.println("--- 新建一本书开始 ----");
            output(xmldoc);
            System.out.println("==============================");
            //--- 新建一本书完成 ----
            //--- 下面对《哈里波特》做一些修改。 ----
            //--- 查询找《哈里波特》----
            //--- 此时修改这本书的价格 -----
            theBook.getElementsByTagName("price").item(0).setTextContent("15");//getElementsByTagName返回的是NodeList,所以要跟上item(0)。另外,getElementsByTagName("price")相当于xpath的".//price"。
            System.out.println("--- 此时修改这本书的价格 ----");
            output(theBook);
            //--- 另外还想加一个属性id,值为B01 ----
            theBook.setAttribute("id", "B01");
            System.out.println("--- 另外还想加一个属性id,值为B01 ----");
            output(theBook);
            //--- 对《哈里波特》修改完成。 ----
            //--- 要用id属性删除《三国演义》这本书 ----
            theBook=(Element) selectSingleNode("/books/book[@id='B02']", root);
            System.out.println("--- 要用id属性删除《三国演义》这本书 ----");
            output(theBook);
            theBook.getParentNode().removeChild(theBook);
            System.out.println("--- 删除后的XML ----");
            output(xmldoc);
            //--- 再将所有价格低于10的书删除 ----
            NodeList someBooks=selectNodes("/books/book[price<10]", root);
            System.out.println("--- 再将所有价格低于10的书删除 ---");
            System.out.println("--- 符合条件的书有 "+someBooks.getLength()+"本。 ---");
            for(int i=0;i<someBooks.getLength();i++) {
                someBooks.item(i).getParentNode().removeChild(someBooks.item(i));
            }
            output(xmldoc);
            saveXml("Test1_Edited.xml", xmldoc);
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void output(Node node) {//将node的XML字符串输出到控制台
        TransformerFactory transFactory=TransformerFactory.newInstance();
        try {
            Transformer transformer = transFactory.newTransformer();
            transformer.setOutputProperty("encoding", "gb2312");
            transformer.setOutputProperty("indent", "yes");
            DOMSource source=new DOMSource();
            source.setNode(node);
            StreamResult result=new StreamResult();
            result.setOutputStream(System.out);
            transformer.transform(source, result);
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        }  
    }
    public static Node selectSingleNode(String express, Object source) {//查找节点,并返回第一个符合条件节点
        Node result=null;
        XPathFactory xpathFactory=XPathFactory.newInstance();
        XPath xpath=xpathFactory.newXPath();
        try {
            result=(Node) xpath.evaluate(express, source, XPathConstants.NODE);
        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }
        return result;
    }
    public static NodeList selectNodes(String express, Object source) {//查找节点,返回符合条件的节点集。
        NodeList result=null;
        XPathFactory xpathFactory=XPathFactory.newInstance();
        XPath xpath=xpathFactory.newXPath();
        try {
            result=(NodeList) xpath.evaluate(express, source, XPathConstants.NODESET);
        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }
        return result;
    }
    public static void saveXml(String fileName, Document doc) {//将Document输出到文件
        TransformerFactory transFactory=TransformerFactory.newInstance();
        try {
            Transformer transformer = transFactory.newTransformer();
            transformer.setOutputProperty("indent", "yes");
            DOMSource source=new DOMSource();
            source.setNode(doc);
            StreamResult result=new StreamResult();
            result.setOutputStream(new FileOutputStream(fileName));
            transformer.transform(source, result);
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }  
    }
}

 
XML文件如下:
复制代码 代码如下:
<?xml version="1.0" encoding="GBK"?>
<books>
<book>
<name>哈里波特</name>
<price>10</price>
<memo>这是一本很好看的书。</memo>
</book>
<book id="B02">
<name>三国演义</name>
<price>10</price>
<memo>四大名著之一。</memo>
</book>
<book id="B03">
<name>水浒</name>
<price>6</price>
<memo>四大名著之一。</memo>
</book>
<book id="B04">
<name>红楼</name>
<price>5</price>
<memo>四大名著之一。</memo>
</book>
</books>

希望本文所述对大家的java程序设计有所帮助。

相关文章

  • 优化spring boot应用后6s内启动内存减半

    优化spring boot应用后6s内启动内存减半

    这篇文章主要为大家介绍了优化spring boot后应用6s内启动内存减半的优化示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-02-02
  • Java接口中尽量避免使用数组

    Java接口中尽量避免使用数组

    这篇文章主要介绍了Java接口中尽量避免使用数组的建议,根据实际示例展示了接口中使用数组而造成的影响程序速度的现象,需要的朋友可以参考下
    2015-07-07
  • 解决mybatis用Map返回的字段全变大写的问题

    解决mybatis用Map返回的字段全变大写的问题

    这篇文章主要介绍了解决mybatis用Map返回的字段全变大写的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • springboot实现登录功能的完整步骤

    springboot实现登录功能的完整步骤

    这篇文章主要给大家介绍了关于springboot实现登录功能的完整步骤,在web应用程序中,用户登录权限验证是非常重要的一个步骤,文中通过代码以及图文介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Spring细数两种代理模式之静态代理和动态代理概念及使用

    Spring细数两种代理模式之静态代理和动态代理概念及使用

    代理是一种设计模式,提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。可以不修改目标对象,对目标对象功能进行拓展。在我们学习Spring的时候就会发现,AOP(面向切面编程)的底层就是代理
    2023-02-02
  • Mybatis拦截器注解@Intercepts与@Signature注解使用

    Mybatis拦截器注解@Intercepts与@Signature注解使用

    本文主要介绍了Mybatis拦截器注解@Intercepts与@Signature注解使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • spring-session自定义序列化方式

    spring-session自定义序列化方式

    这篇文章主要介绍了spring-session自定义序列化方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java实现两人五子棋游戏(七) 屏幕提示信息

    Java实现两人五子棋游戏(七) 屏幕提示信息

    这篇文章主要为大家详细介绍了Java实现两人五子棋游戏,屏幕提示游戏信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Java读取文件的简单实现方法

    Java读取文件的简单实现方法

    这篇文章主要介绍了Java读取文件的简单实现方法,通过一个读取txt格式的log文件为例,详细的讲述了Java读取文件的方法及原理,需要的朋友可以参考下
    2014-09-09
  • 详解Java模拟栈的实现以及Stack类的介绍

    详解Java模拟栈的实现以及Stack类的介绍

    栈是一种数据结构,它按照后进先出的原则来存储和访问数据。Stack是一个类,表示栈数据结构的实现。本文就来和大家介绍一下Java模拟栈的实现以及Stack类的使用,需要的可以参考一下
    2023-04-04

最新评论