`
dyy_gusi
  • 浏览: 209567 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Java解析XML文件的两种方式详解

    博客分类:
  • Java
阅读更多

Java解析XML文件:
常规的两种方式:dom4j方式+jdom方式
1.要解析的xml文件

<?xml version="1.0" encoding="utf-8"?>
<books>
    <book name="ThinkInJava">
        <language>english</language>
        <price>60.0</price>
    </book>
    <book name="Java编程思想">
        <language>chinese</language>
        <price>75.0</price>
    </book>
</books>

 
2.dom4j方式:需要用dom4j.jar包

public class Dom4jXML {

    public Dom4jXML() {
    }

    public void praseXML(String filePath) {
        SAXReader reader = new SAXReader();// 创建一个能读取xml文档的reader
        Document document;// 构建一个文档对象,用来将xml转换成Document对象
        try {
            document = reader.read(new FileInputStream(new File(filePath)));// 从给定的文件中读取xml并且构建成Document
            Element rootElement = document.getRootElement();// 获得文档对象的根节点
            List<Element> listElement = rootElement.elements();// 获得根节点下面所有的子节点
            for (Element e : listElement) {// 遍历所有的子节点
                Element element = e;// 当前节点,也就是Book节点
                Attribute nameAttribute = element.attribute("name");// 得到当前节点的属性对象
                String nameString = nameAttribute.getValue();// 获得属性对象的值
                System.out.println(element.getName() + ":" + nameString);// 将节点信息输出

                Element languageElement = element.element("language");// 获得当前节点的language子节点
                System.out.println(languageElement.getName() + ":" + languageElement.getTextTrim());// 将language节点信息输出

                Element priceElement = element.element("price");
                System.out.println(priceElement.getName() + ":" + priceElement.getText());

                // 判断有没有出版年份节点,要是有就打印出来,要是没有就创建并且添加到Document对象中(添加节点)
                Element yearElement = element.element("year");
                if (yearElement == null) {
                    yearElement = element.addElement("year");
                    yearElement.setText("2014year");
                } else {
                    System.out.println(yearElement.getName() + ":" + yearElement.getTextTrim());
                }

                // 通货膨胀,导致中国物价上涨,凡是汉语书籍涨价10.00元(修改节点)
                if (languageElement.getTextTrim().equals("chinese")) {
                    String priceStr = priceElement.getTextTrim();
                    double priceNum = Double.parseDouble(priceStr);
                    priceNum += 10.00;
                    priceElement.setText(priceNum + "");
                }

            }
            // 将修改以后的Document对象保存成xml到原来的地方
            XMLWriter write = new XMLWriter(new FileWriter(filePath));
            write.write(document);
            write.close();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new Dom4jXML().praseXML("你自己的xml路径");
    }
}

 
3.jdom方式:需要用到jdom.jar包

public class JdomXML {
    public JdomXML() {
    }

    public void parseXML(String filePath) {
        SAXBuilder builder = new SAXBuilder(false);// 用来读取xml文件
        Document document;// 构建一个文档对象,用来将xml转换成Document对象
        try {
            document = builder.build(new FileInputStream(new File(filePath)));// 从给定的文件中读取xml并且构建成Document
            Element elementRoot = document.getRootElement();// 获得文档对象的根节点
            List<Element> elementList = elementRoot.getChildren("book");// 获得根节点下面所有的Book节点
            for (Element e : elementList) {// 遍历Book节点
                Element element = e;// 当前的Book节点
                String name = element.getAttributeValue("name");// 获得Book节点的name属性

                Element languageElement = element.getChild("language");// 获得Book节点下的language子节点
                String language = languageElement.getValue();// 获得language节点的值

                Element priceElement = element.getChild("price");
                String price = priceElement.getValue();

                // 打印输出子节点相关信息
                System.out.println(element.getName() + ":" + name);
                System.out.println(languageElement.getName() + ":" + language);
                System.out.println(priceElement.getName() + ":" + price);

                // 判断有没有出版年份节点,要是有就打印出来,要是没有就创建并且添加到Document对象中(添加节点)
                Element yearElement = element.getChild("year");
                if (yearElement == null) {
                    yearElement = new Element("year");
                    yearElement.setText("2014year");
                    element.addContent(yearElement);
                } else {
                    System.out.println(yearElement.getName() + ":" + yearElement.getValue());
                }

                // 判断是不是外文书籍,要是外文书籍,就降价1.50元(修改节点)
                if (language.equals("english")) {
                    double priceNum = Double.parseDouble(price);
                    priceNum -= 1.50;
                    priceElement.setText(priceNum + "");
                }
            }
            // 将修改以后的Document对象保存成xml到原来的地方
            XMLOutputter outputter = new XMLOutputter();
            outputter.output(document, new FileOutputStream(new File(filePath)));
        } catch (JDOMException | IOException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        new JdomXML().parseXML("你自己的xml路径");
    }
}

 
说明:两种方式都是可以的,原理基本相同。语法略有不同,但是还是都很好理解。
可以使用这种方法完成一个自己的Spring的IOC的功能玩玩。

6
1
分享到:
评论
1 楼 kt431128 2013-12-28  
能不能详细说以下这两种解析方式在性能上的优缺点了?数据量也别大的情况下哪种方式解析性能会好点了?谢谢。

相关推荐

    详解Java解析XML的四种方法

    ### 详解Java解析XML的四种方法 #### 一、引言 XML(可扩展标记语言)作为一种跨平台、跨语言的数据交换格式,在多种场景中扮演着重要的角色。它以其平台无关性、语言无关性和系统无关性的特点,在数据集成与交互...

    详 解Java解析XML

    Java 解析 XML 主要涉及两种主流方法:DOM(Document Object Model)和 SAX(Simple API for XML),以及另外两种更现代的技术:StAX(Streaming API for XML)和JAXB(Java Architecture for XML Binding)。...

    JAVA解析XML

    本文介绍了Java解析XML的两种主要方式:DOM和SAX。DOM适合于需要频繁访问和修改XML数据的场景,而SAX适用于数据量大且只需读取的场景。开发者可以根据实际需求选择合适的解析方式。此外,还介绍了如何使用Java代码...

    Java解析XML文件

    ### Java解析XML文件:DOM与SAX解析技术详解 #### DOM解析:JAXP与Crimson解析器 DOM(Document Object Model),即文档对象模型,是W3C为XML文档定义的一种标准接口,用于在各种编程语言中操作XML文档。DOM将XML...

    java xml文件解析

    在Java中,有多种解析XML文件的方式,包括DOM (Document Object Model)、SAX (Simple API for XML) 和 DOM4J。这些方法各有优势和局限性,选择哪一种取决于具体的应用场景和需求。 #### 二、DOM 解析方式 DOM 解析...

    详解XML各种解析方法

    ### 详解XML各种解析方法 #### 一、引言 自从可扩展标记语言(XML)在大约九年前首次亮相以来,它已经成为了软件开发中不可或缺的一部分。然而,即便是那些拥有丰富经验的开发人员,在面对一些基本问题时也可能...

    android SAX PULL 解析XML文件 代码 详解

    总之,Android提供了SAX和PULL两种解析XML的手段,开发者可以根据具体情况灵活选择。在内存有限或者需要高效处理大量XML数据的情况下,SAX可能是更好的选择;而在追求简洁代码和快速开发的场合,PULL解析则更为便捷...

    dom4j.jar包,java解析xml dom4j.jar包

    解析XML文件时,DOM4J提供了两种主要的方式:DOM阅读器和SAX阅读器。 - **DOM阅读器**:首先,通过`DocumentFactory.createDocument()`方法创建一个`Document`对象,然后使用`read()`方法读取XML文件,将整个XML...

    java_Dom4j解析XML详解.doc

    ### DOM4J解析XML详解 #### 一、DOM4J简介 DOM4J是一个由dom4j.org组织提供的开源XML解析工具包,专为Java平台设计。它支持DOM(Document Object Model)、SAX(Simple API for XML)以及JAXP(Java API for XML ...

    XML-Java解析XM

    在Java中,解析XML的主要方式有两种:SAX(Simple API for XML)和DOM(Document Object Model)。此外,还有一些其他的框架和技术如JAXP、JDOM、DOM4J、JAXB等,它们提供了更高级别的抽象和功能。 ##### 1. SAX:...

    java_Dom4j解析XML详解.pdf

    - **读取XML文档**:DOM4J提供`SAXReader`和`DOMReader`两种方式。通常,`SAXReader`更适合处理大型XML文件,因为它基于事件驱动,不需要一次性加载整个文档到内存。以下是一个使用`SAXReader`读取XML文件的例子: ...

    Java实现解析并生成xml原理实例详解

    本文主要介绍了Java实现解析并生成xml原理实例详解,通过示例代码详细介绍了XML解析的原理和实现方式,涵盖了DOM和SAX两种解析方式,JAXP、JDOM、DOM4J等解析器的使用,以及XPath的应用。 XML解析是Java开发中的一...

    Java解析XML汇总DOM_SAX_JDOM_DOM4j_XPath

    ### Java解析XML技术详解:DOM、SAX、JDOM、DOM4j与XPath #### 一、基础知识概览 在Java开发中,处理XML文件是一项常见的任务。XML(Extensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的标准...

    java写XML文件和读取XML文件《一个优秀程序员必会知识要点》

    在Java中,可以使用`DocumentBuilderFactory`和`DocumentBuilder`类来创建DOM解析器并解析XML文件。 **步骤详解:** - **初始化DocumentBuilderFactory实例:** ```java DocumentBuilderFactory dbf = ...

    java and xml_book and source_2

    《Java与XML技术详解》是一本深入探讨Java与XML结合使用的专业书籍,涵盖了从基础到高级的诸多主题,旨在帮助读者全面理解并掌握这两种技术在实际开发中的应用。书中可能包含了XML的基础语法、解析机制,Java API...

    基于java解析JSON的三种方式详解

    JSON通常由两种结构组成,一个是键值对集合,用大括号{}表示;另一个是值的有序列表,用方括号[]表示。键值对集合表示一个对象,每个键值对之间用逗号分隔。值的有序列表表示一个数组,数组中的每个值也可以是一个...

Global site tag (gtag.js) - Google Analytics