当前位置: 首页 > 编程笔记 >

JAVA操作XML实例分析

沈俊明
2023-03-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程序设计有所帮助。

 类似资料:
  • 本文向大家介绍php操作mongoDB实例分析,包括了php操作mongoDB实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php操作mongoDB的方法。分享给大家供大家参考。具体分析如下: mongoDB数据库是一种以json格式存储的数据库,非常适用于各种应用开发,这里就来给各位朋友介绍一些mongoDB学习实例. mongodb想要整合PHP,需要安装Mongo扩展,这个

  • 本文向大家介绍java对象序列化操作实例分析,包括了java对象序列化操作实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java对象序列化操作。分享给大家供大家参考,具体如下: 在java中可以将对象进行序列化操作 要使对象能够被序列化,那么被序列化的对象要实现接口Serializable,此接口位于java.io包中 序列化对象案例程序,网上的教程是将序列化的对象输出到文件,但

  • 本文向大家介绍MybatisPlus,无XML分分钟实现CRUD操作,包括了MybatisPlus,无XML分分钟实现CRUD操作的使用技巧和注意事项,需要的朋友参考一下 不讲太多理论知识,官网都有,直接上手。 1.测试表 引入依赖 配置文件,这里我用的是boot项目 其实简单的crud甚至不需要mybatis-plus的配置,我这里没删除,本文也并没有用到配置文件。 实体类 分页插件 编写一个我

  • 本文向大家介绍python写xml文件的操作实例,包括了python写xml文件的操作实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python写xml文件的操作的方法,分享给大家供大家参考。具体方法如下: 要生成的xml文件格式如下: Python实现代码如下: 希望本文所述对大家的Python程序设计有所帮助。

  • 本文向大家介绍jQuery链式操作实例分析,包括了jQuery链式操作实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery链式操作。分享给大家供大家参考,具体如下: 从过去的实例中,我们知道jQuery语句可以链接在一起,这不仅可以缩短代码长度,而且很多时候可以实现特殊的效果。 以上代码为整个<div>列表增加样式css1,然后再进行筛选,再为筛选的元素单独增加css2样式

  • 本文向大家介绍jQuery中DOM操作实例分析,包括了jQuery中DOM操作实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery中DOM操作的方法。分享给大家供大家参考。具体分析如下: 这里主要设计的dom操作包括:dom对象的创建(JS方式和jquery方式)、属性的修改、样式的修改、动态绑定事件 代码如下: 希望本文所述对大家的jQuery程序设计有所帮助。