`
biejunbo
  • 浏览: 17104 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

javadom框架操作XML文件

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

假设有XML文件:test1.xml

<?xml version="1.0" encoding="UTF-8"?>
<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 DOM 生成XML

    Java DOM(Document Object Model)是一种基于树形结构的XML文档处理模型,它允许程序员通过对象接口来访问和操作XML文档的各个部分。DOM为XML文档提供了一种内存中的表示方式,使得开发人员可以方便地创建、修改和...

    java dom4j中生成xml文件

    Java DOM4J库是用于处理XML文档的一个强大的开源框架,它提供了一种简单而灵活的方式来创建、解析和操作XML文件。DOM4J这个名字中的“DOM”代表文档对象模型(Document Object Model),这是一种标准的API,用于在...

    java dom4j 解析xml的例子,可用

    Java DOM4J库是用于处理XML文档的一个强大的开源框架,它提供了一种灵活且高效的方式来解析、创建和操作XML内容。DOM4J这个名字来源于“Document Object Model”(DOM)和“Java”的组合,它扩展了DOM接口,同时引入...

    dom4j读写xml文档实例

    要使用DOM4J读取XML文档,首先需要创建一个`SAXReader`对象,然后调用`read`方法传入XML文件路径。这将返回一个`Document`对象,我们可以从中获取所有元素信息。 ```java File file = new File("path_to_xml_file")...

    java xml.java操作XML文档

    Java XML API是Java平台上的...通过这些API,开发者可以根据需求选择最适合的XML处理方式,不论是小型还是大型XML文件,都能有效地进行操作。在实际项目中,合理选择和组合使用这些API,能够提高代码的效率和可维护性。

    java操纵xml文件的读写,并根据xml生成树型菜单

    本文将详细介绍如何使用Java进行XML文件的读写操作,并基于读取到的数据生成树型菜单,以方便用户浏览和操作。 #### 二、关键概念解释 1. **XML文件**: 一种结构化数据存储的语言,用于标记电子文档。 2. **DOM ...

    dom4j解析xml文件的压缩包

    5. **事件驱动解析(SAX)**:除了传统的DOM解析外,DOM4J还支持SAX解析器,这种解析方式适用于处理大型XML文件,因为它不需要一次性加载整个文档到内存。 6. **Namespace支持**:DOM4J提供了对XML命名空间的全面...

    java文件生成xml文档

    如果你使用的是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.jdom &lt;artifactId&gt;jdom2 &lt;version&gt;2.0.6 ``` 然后,我们可以按照以下步骤创建一个简单的XML文档: 1. **创建元素**:使用...

    Java_dom4J_XML.rar_dom4j xml java

    1. **解析XML文档**:使用`DocumentFactory`创建`Document`对象,然后通过`SAXReader`读取XML文件,将其转换为`Document`对象。例如: ```java File file = new File("example.xml"); SAXReader reader = new ...

    通过Dom4j创建和读取xml文件下载

    在实践中,`Dom4jUtil.java`会包含如`createXMLDocument()`, `readXMLDocument()`等方法,分别用于创建XML文档和读取XML文件。而`Dom4jTest.java`则会包含测试用例,测试这些方法是否能正确地创建和解析XML。通过...

    java和js操作XML文件

    本篇将详细介绍如何在Java和JavaScript中操作XML文件。 1. Java操作XML文件 - DOM解析:Java中使用DOM解析器(如org.w3c.dom.Document类)可以将整个XML文档加载到内存中,形成一个树形结构,然后通过API进行遍历...

    Java解析xml配置文件,DOM4J解析xml配置文件,提供使用文档和源码下载

    Java解析XML配置文件是开发过程中常见的一项任务,特别是在基于Java的框架中,如Spring,大量使用XML文件来存储配置信息。DOM4J是Java中一个非常流行且功能强大的XML处理库,它提供了丰富的API用于读取、写入、修改...

    DOM4J读取XML文件

    这篇博客“DOM4J读取XML文件”可能详细介绍了如何利用DOM4J库来操作XML文档,下面我们将深入探讨DOM4J的相关知识点。 1. **DOM4J简介** DOM4J是一个开源的Java库,它基于DOM模型,但比标准的Java DOM API更易于...

    java读取 配置 xml文件

    总的来说,Java通过DOM解析XML文件,可以方便地读取和操作XML配置。结合这个基础,我们可以构建自己的轻量级框架来管理和实例化bean,模仿Spring的部分功能。然而,要完全复现Spring的强大功能,还需要深入理解和...

    Java解析XML文档(DOM与DOM4j两种方式)

    DOM4j是一个灵活的Java XML API,它提供了一个强大的基于事件和DOM的XML解析器,同时包含XPath和Java集合框架的完全支持。 1. 引入DOM4j库:在项目中添加DOM4j依赖,如Maven项目中添加以下依赖: ```xml ...

    Java读写xml java 读写xml文件操作, 简单易懂

    本文将基于提供的文件信息,深入探讨如何利用Java进行XML文件的读取与写入,重点介绍DOM(Document Object Model)方式的操作。 #### DOM解析XML文件 DOM是一种树形结构的数据模型,用于表示XML文档的结构。通过...

    JAVA操作XML文件

    这篇博客文章“JAVA操作XML文件”可能涵盖了如何在Java环境中解析、创建和修改XML文档的核心概念。以下是相关的知识点详解: 1. **DOM解析器**: - DOM(Document Object Model)是W3C的标准,它将XML文档转化为一...

    dom4j解析xml详解

    - **配置文件解析**: 许多应用使用XML作为配置文件的格式,DOM4J可以方便地读取和更新这些配置信息。 - **Web服务**: 在SOAP等协议中,XML是常用的数据传输格式,DOM4J能够帮助构建和解析这些XML消息。 - **文档生成...

    java处理xml文件

    - **DOM解析:** DOM(Document Object Model)模型将XML文件视为一个树形结构,通过`DocumentBuilder`类加载XML文件,生成`Document`对象,然后可以遍历整个文档节点进行操作。 - **SAX解析:** SAX(Simple API ...

Global site tag (gtag.js) - Google Analytics