`

Java对Xml进行操作的实例(转)

    博客分类:
  • XML
 
阅读更多
这是一个用JAVA W3C DOM 进行XML操作的例子,包含了查询、增加、修改、删除、保存的基本操作。较完整的描述了一个XML的整个操作流程。适合刚入门JAVA XML操作的朋友参考和学习。

假设有XML文件:test1.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>

下面是为Test.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=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);
            //--- 新建一本书完成 ----

            //--- 下面对《哈里波特》做一些修改。 ----
            //--- 查询找《哈里波特》----
            theBook=(Element) selectSingleNode("/books/book[name='哈里波特']", root);
            System.out.println("--- 查询找《哈里波特》 ----");
            output(theBook);
            //--- 此时修改这本书的价格 -----
            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();
        }   
    }
}

 

分享到:
评论

相关推荐

    java实现Xml与json之间的相互转换操作示例

    5. 相关在线工具推荐:在实际开发中,如果需要频繁进行xml与json的转换操作,除了使用Java代码实现之外,还可以使用在线工具进行操作,例如示例中提供的在线json代码检验、美化、格式化工具,以及在线xml/json互相...

    JAVA 解析XML生成XML文档实例

    JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    java http 发送xml报文(java发送xml报文实例+参数)

    在Java编程中,HTTP协议是网络通信的一种标准,常用于...此外,XML报文内容也需要根据实际需求进行定制。如果你在实现过程中遇到问题,可以参考相关Java和HTTP协议的文档,或者访问www.d1bysj.cn获取更多帮助和资源。

    Java操作XML编程实例解析.doc

    Java操作XML编程主要涉及到以下几个关键知识点: 1. **XML(eXtensible Markup Language)**:XML是一种可扩展的标记语言,用于存储和传输结构化数据。它的设计目的是传输和存储数据,而不是显示数据,因此它不像...

    JAVA对xml操作

    dom4j是一个灵活且功能丰富的Java XML API,它简化了DOM操作。通过`DocumentHelper.parseText()`方法可以直接将XML字符串解析为`org.dom4j.Document`对象。反过来,要将`Document`对象转换为字符串,只需调用`asXML...

    java对xml操作的项目案例

    本项目案例“java对xml操作的项目案例”深入探讨了如何使用Java来读取、修改和写入XML文件。下面将详细阐述相关知识点。 一、Java与XML的交互 1. DOM解析器:Document Object Model (DOM) 是一种将整个XML文档加载...

    java 中HttpClient传输xml字符串实例详解

    在本实例中,我们将讲解如何使用HttpClient来传输XML字符串。首先,我们需要确保引入了正确的依赖,包括Apache HttpClient、HttpMime、Commons Lang以及其他的辅助库。以下是POM文件中的依赖配置: ```xml &lt;!-- ....

    如何在Java中将XML文档转换成HTML文档.pdf

    6. **错误处理**:在转换过程中可能会遇到各种错误,例如样式表语法错误、XML文档结构不正确等,因此需要对异常进行适当的捕获和处理。 #### 示例代码片段 ```java import javax.xml.transform.TransformerFactory...

    java操作xml实例

    本实例将带你了解如何在 Java 中进行基本的 XML 操作。 1. **Java与XML库** - **DOM(Document Object Model)**: DOM 提供了一种结构化的表示 XML 文档的方式,通过创建一棵节点树来代表整个文档。Java 中的 `...

    java操作xml的实例

    本实例将带你深入理解Java操作XML的关键知识点。 1. **DOM解析**: - DOM(Document Object Model)模型是XML文档的一种树形表示方式,Java中的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom....

    java对xml基本的操作

    本文将深入探讨Java对XML的基本操作,包括读取、创建、修改和删除XML文档,以实现对XML的增删改查功能。 首先,让我们了解Java中处理XML的主要API:JDOM、DOM、SAX和StAX。DOM是文档对象模型,它一次性加载整个XML...

    java 解析xml 多级

    Java作为一种广泛使用的后端编程语言,提供了多种方式来解析XML文档,使得处理多级嵌套的数据变得可能。本文将详细讲解如何在Java中解析XML,特别是针对多级结构的情况。 首先,Java提供了两种主要的API来处理XML:...

    Java操作XML编程实例解析

    #### 四、Java操作XML实例 下面是一个使用Java读取和写入XML文件的具体实例。 ##### 1. XML文件结构 首先,我们来看一下XML文件的基本结构: ```xml &lt;?xml version="1.0" encoding="GB2312"?&gt; &lt;学生花名册&gt; ...

    Java XML书和实例

    XML(eXtensible Markup Language)是一种标记语言,用于描述数据并使其具有自解释性,而Java则是强大的编程语言,提供了丰富的API来解析、生成、操作和转换XML文档。这两者的结合使得数据交换和集成变得更加灵活和...

    java类与xml之间相互转换实例

    通过这个实例,你应该对如何使用XStream进行了初步了解。实践中,根据具体需求可能需要进行更多的定制,例如添加数据类型转换器、处理日期格式等。熟练掌握这一技能将使你在处理Java和XML之间的数据交互时更加...

    xml文件自动转成java对象工具

    解析器读取XML文件,将其内容构建为内存中的树形结构,然后工具遍历这个结构,创建对应的Java对象实例。 在实际应用中,这样的工具能够节省开发者大量时间,尤其是在处理复杂的XML数据结构时。通过自动化的转换,...

    Java操作XML编程实例解析.pdf

    Java操作XML编程主要涉及到以下几个关键知识点: 1. **XML(eXtensible Markup Language)**:XML是一种可扩展的标记语言,用于存储和传输结构化数据。它的设计目标是简化数据共享和交换,且具有自描述性,允许用户...

    java json xml转换

    描述:“java版的json与xml之间的转换的实例demo” JSON和XML各有优缺点。JSON以其简洁、易于阅读和生成而受到青睐,尤其适合在网络传输中使用;XML则因其强大的结构化能力,用于复杂的文档和数据存储。在Java环境...

    JavaXml及Bean互转

    将Java Bean与XML进行互转是常见的需求,这有助于在不同系统间传递数据或者持久化对象状态。本篇将详细介绍两种常用的Java XML与Bean互转方法:XStream库和JAXB(Java Architecture for XML Binding)框架。 一、...

Global site tag (gtag.js) - Google Analytics