`

[转] Java与XML(一):采用DOM操作XML文件

    博客分类:
  • XML
 
阅读更多

Java与XML(一):采用DOM操作XML文件

 

1.DOM介绍

DOM 是用与平台和语言无关的方式表示XML文档的官方 W3C 标准。DOM 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构, 然后才能做任何工作。 由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的。DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。 它还可以在任何时候在树中上下导航, 而不是像 SAX 那样是一次性的处理。 DOM使用起来也要简单得多。

2.采用DOM解析XML文件

代码实例:

复制代码
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
 * @Author:胡家威
 * @CreateTime:2011-9-6 下午10:12:00
 * @Description:采用DOM解析XML文件
 */

public class DomXML {

    public void domXMl(String fileName) {
        try {
            DocumentBuilder domBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            InputStream input = new FileInputStream(fileName);
            Document doc = domBuilder.parse(input);
            Element root = doc.getDocumentElement();
            NodeList students = root.getChildNodes();
            if (students != null) {
                for (int i = 0, size = students.getLength(); i < size; i++) {
                    Node student = students.item(i);
                    if (student.getNodeType() == Node.ELEMENT_NODE) {
                        String sexString = student.getAttributes().getNamedItem("性别").getNodeValue();
                        System.out.println(sexString);
                    }

                    for (Node node = student.getFirstChild(); node != null; node = node.getNextSibling()) {
                        if (node.getNodeType() == Node.ELEMENT_NODE) {
                            if (node.getNodeName().equals("姓名")) {
                                String name = node.getFirstChild().getNodeValue();
                                System.out.println(name);
                            }
                            if (node.getNodeName().equals("年龄")) {
                                String age = node.getFirstChild().getNodeValue();
                                System.out.println(age);
                            }
                            if (node.getNodeName().equals("电话")) {
                                String tel = node.getFirstChild().getNodeValue();
                                System.out.println(tel);
                            }
                        }
                    }

                }
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        DomXML xmlTest = new DomXML();
        String fileName = "students.xml";
        xmlTest.domXMl(fileName);
    }

}
复制代码

目录结构:在项目的根目录下面放置一个XML文件

 
<?xml version="1.0" encoding="UTF-8"?>
<学生花名册>
    <学生 性别="男">
        <姓名>李华</姓名>
        <年龄>14</年龄>
        <电话>6287555</电话>
    </学生>
    <学生 性别="男">
        <姓名>张三</姓名>
        <年龄>16</年龄>
        <电话>8273425</电话>
    </学生>
</学生花名册>

  

运行结果:

李华

14

6287555

张三

16

8273425

3.使用DOM操作XML文件,进行增删查改

代码示例:

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
 * @Author:胡家威
 * @CreateTime:2011-9-23 下午09:08:03
 * @Description:DOM操作XML文件,增删查改
 */


public class DealXML {

  public static void main(String[] args) {
    try {
      // Document-->Node
      Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("products.xml");
      Element root = document.getDocumentElement();

      // 增加一个元素节点
      Element newChild = document.createElement("project");
      newChild.setAttribute("id""NP001");// 添加id属性

      Element nelement = document.createElement("name");// 元素节点
      nelement.setTextContent("New Project");
      newChild.appendChild(nelement);
      Element selement = document.createElement("start-date");
      selement.setTextContent("March 20 1999");
      newChild.appendChild(selement);
      Element eelement = document.createElement("end-date");
      eelement.setTextContent("July 30 2004");
      newChild.appendChild(eelement);

      root.appendChild(newChild);

      // 查找一个元素节点
      String expression = "/projects/project[3]";
      Element node = (Element) selectSingleNode(expression, root);// 转型一下
      // 修改一个元素节点
      node.getAttributeNode("id").setNodeValue("new "+node.getAttribute("id"));
      // root.getElementsByTagName("project").item(2).setTextContent("");
      expression = "/projects/project";
      NodeList nodeList = selectNodes(expression, root);
      nodeList.item(1).getAttributes().getNamedItem("id").setNodeValue("New Id");
      // 删除一个元素节点
      expression = "/projects/project[2]";
      node = (Element) selectSingleNode(expression, root);
      root.removeChild(root.getFirstChild());

      output(root, "newProjects.xml");
    } catch (SAXException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (ParserConfigurationException e) {
      e.printStackTrace();
    }
  }

  public static void output(Node node, String filename) {
    TransformerFactory transFactory = TransformerFactory.newInstance();
    try {
      Transformer transformer = transFactory.newTransformer();
      // 设置各种输出属性
      transformer.setOutputProperty("encoding""gb2312");
      transformer.setOutputProperty("indent""yes");
      DOMSource source = new DOMSource();
      // 将待转换输出节点赋值给DOM源模型的持有者(holder)
      source.setNode(node);
      StreamResult result = new StreamResult();
      if (filename == null) {
        // 设置标准输出流为transformer的底层输出目标
        result.setOutputStream(System.out);
      } else {
        result.setOutputStream(new FileOutputStream(filename));
      }
      // 执行转换从源模型到控制台输出流
      transformer.transform(source, result);
    } catch (TransformerConfigurationException e) {
      e.printStackTrace();
    } catch (TransformerException e) {
      e.printStackTrace();
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }
  }

  // 查找一个单独的节点
  private static Node selectSingleNode(String expression, Object source) {
    try {
      return (Node) XPathFactory.newInstance().newXPath().evaluate(expression, source, XPathConstants.NODE);
    } catch (XPathExpressionException e) {
      e.printStackTrace();
      return null;
    }
  }

  // 查找所有的节点
  private static NodeList selectNodes(String expression, Object source) {
    try {
      return (NodeList) XPathFactory.newInstance().newXPath().evaluate(expression, source, XPathConstants.NODESET);
    } catch (XPathExpressionException e) {
      e.printStackTrace();
      return null;
    }
  }

}

左边是修改前的,右边的是修改了之后生成的XML文件

更多详情请见:http://www.cnblogs.com/stephen-liu74/archive/2011/09/12/2151209.html

分享到:
评论

相关推荐

    Java与XML(一):采用DOM操作XML文件.docx

    public class DomXML { public void parseXML(String fileName) { try { DocumentBuilder domBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); InputStream input = new FileInputStream...

    java 操作XML 采用(dom+dom4j)读写源码 lib包

    DOM4J是一个非常流行的Java XML API,它扩展了DOM,提供了更方便的操作XML的功能。DOM4J不仅支持DOM,还支持SAX和STAX解析。 读取XML文件: ```java import org.dom4j.DocumentHelper; import org.dom4j.Document; ...

    Java XML文件操作类:Dom4jHelper源文件下载.rar

    Java XML文件操作类:Dom4jHelper源代码文件下载,实现的功能:解析url xml文档,遍历解析文档,遍历解析元素,解析文件,获得根元素,修改xml某节点的值,输出文件路径及文件名 如果输出文件为null,则默认为原xml文件,...

    Java与XML联合编程之DOM篇.rar_dom xml_dom xml java_java xml

    DOM(Document Object Model)是W3C制定的一种标准,它为XML文档提供了一个树形结构,使得程序员可以方便地访问和操作XML文档的每一个元素。本教程将深入探讨Java中使用DOM模型解析XML文件的方法。 首先,我们需要...

    Java操作xml文件工具包dom4j源码

    Java操作XML文件是一种常见的任务,尤其在处理配置文件、数据交换或者进行数据解析时。DOM4J是一个强大的Java XML API,它提供了灵活且高效的API来处理XML文档。在这个压缩包中,你获得了DOM4J的源码,这对于理解其...

    java dom 操作xml

    Java DOM(Document Object Model)是Java处理XML文档的一种标准方式,它将XML文档解析成一个树形结构,每个XML元素、属性和文本内容都对应树中的一个节点。DOM提供了丰富的API,允许开发者对XML进行增、删、改、查...

    java list和xml互转例子

    总之,Java List与XML之间的转换是数据交换和持久化的重要手段,而dom4j库提供了一种方便的方式来实现这种转换。通过熟练掌握这些概念和方法,开发者可以更好地在Java应用程序中处理结构化的数据。

    基于DOM4j和POI实现的XML文件转换为XLS(即标准EXCEL)的JAVA程序

    在IT领域,XML和Excel...开发者可以借此学习和理解XML的解析、Java对象与Excel单元格之间的映射,以及如何使用Apache POI实现复杂的Excel操作。这不仅可以提高数据处理的效率,还能减少格式转换过程中可能出现的错误。

    Java DOM 生成XML

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

    Java创建xml文档笔记(DOM,DOM4J)

    在Java编程中,XML(可扩展标记语言)是一种被广泛用于数据存储和交换的格式,尤其是在Web服务和配置文件中。本笔记将深入探讨如何使用DOM(文档对象模型)和DOM4J库来创建XML文档。 一、DOM解析器 DOM是W3C推荐的...

    java导入导出xml文件

    本文将深入探讨如何在Java中进行XML文件的导入与导出。 首先,理解XML的基本结构至关重要。XML文件由一系列的元素构成,每个元素都有可能包含子元素或者文本内容。元素通过开始标签 `&lt;tag&gt;` 和结束标签 `&lt;/tag&gt;` ...

    java解析XML dom4j dom4j-1.6.1.jar

    Java解析XML时,dom4j是一个非常流行的库,它提供了灵活且强大的API来处理XML文档。dom4j-1.6.1.jar是这个库的一个版本,发布于2005年,它支持XML的读取、写入、操作以及查询功能。在本文中,我们将深入探讨dom4j的...

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

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

    xml.rar_dom操作xml_java 操作 xml_java xml_sax_xml

    学习和掌握Java操作XML的这两种方法,对于开发人员来说至关重要,尤其是在处理XML数据交换、配置文件或与Web服务交互时。DOM适合小型XML文档和需要频繁访问的情况,而SAX则适合处理大型XML文档或资源有限的环境。...

    java 操作xml 源码(包括dom dom4j 读写XML)

    dom是W3C规范,比较典型的JAVA操作XML方式,适用于小型文件。 dom4j是开源的性能以及效率最好的,也是一个典型例子。 本源码下下来运行test.java直接运行。 其中包括:采用dom写xml 以及dom方式读XML 采用dom4j写xml...

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

    XSD文件转Java工具能够基于XSD文件生成对应的Java类,这些类包含了与XSD定义的元素和属性相对应的字段和方法。 转换过程通常包括以下步骤: 1. **解析XSD文件**:工具首先读取XSD文件,分析其元素、属性、类型定义...

    JAVA读XML:sax,dom,jdom,dom4j的比较以及选择.doc

    Java 读取XML文件时,有多种解析器可供选择,分别是SAX、DOM、JDOM和DOM4J。这些解析器各有优缺点,适用于不同的场景。 SAX(Simple API for XML)是一种基于事件驱动的解析器。它在解析XML文件时,会按顺序触发一...

    Java操作XML文件-dom4j .doc

    Java中的DOM4J库是一个非常流行的处理XML文档的工具,它提供了一套简单易用的API,使得在Java中操作XML文件变得相当便捷。本文主要介绍如何使用DOM4J进行XML文件的操作,包括XML字符串与Document对象之间的转换,...

    Java与XML联合编程之DOM篇

    Java与XML联合编程之DOM篇 JAVA xml domJava与XML联合编程之DOM篇 JAVA xml domJava与XML联合编程之DOM篇 JAVA xml dom

    Java实现PDF读写(Itext)与解析XML读写(Dom4j)

    二、用Java语言(Dom4j)完成了以下XMLToVds、TxtToVDS功能: 项目文件为TxtToVDS.java 、XMLToVds.java 1、创建TXT D:/zhouyl/111.txt 2、读TXT文本D:/zhouyl/111.txt创建相应格式的D:/zhouyl/111.VDS 3、创建XML...

Global site tag (gtag.js) - Google Analytics