dom解析和生成XML文件

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

使用这种方式解析时,需要使用node.getNodeType() == Node.ELEMENT_NODE判断结点是否为元素结点,否则会输出很多#text(结点前有空格存在的原因)。

完成的XML解析和生成代码如下:

package test;

import java.io.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;

class XMLHelper {
    /**
     * 解析XML
     * @param filename 要解析的XML的文件名
     */
    public static void resolveXML(String filename) {
        File f = new File(filename);
        DocumentBuilderFactory factory = null;
        DocumentBuilder db = null;
        Element element = null;
        try {
            //获得DOM解析器工厂
            factory = DocumentBuilderFactory.newInstance();
            //获取具体的DOM解析器
            db = factory.newDocumentBuilder();
            //解析一个xml文档,获得Document对象(根节点)
            Document document = db.parse(f);
            element = document.getDocumentElement();

            System.out.println("Root: " + element.getNodeName());
            NodeList childNodes = element.getChildNodes();
            for (int i = 0; i < childNodes.getLength(); i++) {
                Node node = childNodes.item(i);
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    System.out.println(node.getNodeName());
                    NodeList nodes = node.getChildNodes();
                    for (int j = 0; j < nodes.getLength(); j++) {
                        Node temp = nodes.item(j);
                        if (temp.getNodeType() == Node.ELEMENT_NODE) {
                            System.out.println("    " + temp.getNodeName() + 
                                ": " + temp.getTextContent());
                        }
                    }
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    /**
     * 生成XML文件
     * @param filename 将生成的XML输出到该文件
     */
    public static void CreateXML(String filename) {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = factory.newDocumentBuilder();
            Document document = db.newDocument();
            Element root = document.createElement("bookstore");

            //add book
            Element book = document.createElement("book");
            book.setAttribute("category", "COOKING");
            //book.title
            Element title = document.createElement("title");
            title.setAttribute("lang", "en");
            title.setTextContent("Everyday Italian");
            book.appendChild(title);
            //book.author
            Element author = document.createElement("author");
            author.setTextContent("Giada De Laurentiis");
            book.appendChild(author);
            //book.year
            Element year = document.createElement("year");
            year.setTextContent("2005");
            book.appendChild(year);
            //book.price
            Element price = document.createElement("price");
            price.setTextContent("30.00");
            book.appendChild(price);
            root.appendChild(book);

            //add book
            book = document.createElement("book");
            book.setAttribute("category", "CHILDREN");
            //book.title
            title = document.createElement("title");
            title.setAttribute("lang", "en");
            title.setTextContent("Harry Potter");
            book.appendChild(title);
            //book.author
            author = document.createElement("author");
            author.setTextContent("J K. Rowling");
            book.appendChild(author);
            //book.year
            year = document.createElement("year");
            year.setTextContent("2005");
            book.appendChild(year);
            //book.price
            price = document.createElement("price");
            price.setTextContent("39.99");
            book.appendChild(price);
            root.appendChild(book);

            //add book
            book = document.createElement("book");
            book.setAttribute("category", "WEB");
            //book.title
            title = document.createElement("title");
            title.setAttribute("lang", "en");
            title.setTextContent("Learning XML");
            book.appendChild(title);
            //book.author
            author = document.createElement("author");
            author.setTextContent("Erik T. Ray");
            book.appendChild(author);
            //book.year
            year = document.createElement("year");
            year.setTextContent("2003");
            book.appendChild(year);
            //book.price
            price = document.createElement("price");
            price.setTextContent("39.95");
            book.appendChild(price);
            root.appendChild(book);

            document.appendChild(root);
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            Source xmlSource = new DOMSource(document);
            StreamResult outputTarget = new StreamResult(new File(filename));
            transformer.transform(xmlSource, outputTarget);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

public class Main {
    public static void main(String[] args) throws Exception{
        String filename = "E:\\Eclipse Project\\WebTest\\WebContent\\myxml1.xml";
        XMLHelper.resolveXML(filename);
        filename = "E:\\Eclipse Project\\WebTest\\WebContent\\myxml2.xml";
        XMLHelper.CreateXML(filename);
    }
}

输入的XML文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
  <title lang="en">Everyday Italian</title> 
  <author>Giada De Laurentiis</author> 
  <year>2005</year> 
  <price>30.00</price> 
</book>
<book category="CHILDREN">
  <title lang="en">Harry Potter</title> 
  <author>J K. Rowling</author> 
  <year>2005</year> 
  <price>29.99</price> 
</book>
<book category="WEB">
  <title lang="en">Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
</book>
</bookstore>

解析函数的输出如下:

Root: bookstore
book
    title: Everyday Italian
    author: Giada De Laurentiis
    year: 2005
    price: 30.00
book
    title: Harry Potter
    author: J K. Rowling
    year: 2005
    price: 39.99
book
    title: Learning XML
    author: Erik T. Ray
    year: 2003
    price: 39.95


转载:http://blog.csdn.net/foreverling/article/details/50150111

目录
相关文章
|
3月前
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
114 2
|
23天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
106 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
2月前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
57 3
|
2月前
|
XML Android开发 数据格式
Eclipse 创建 XML 文件
Eclipse 创建 XML 文件
43 2
|
2月前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
256 8
|
2月前
|
存储
文件太大不能拷贝到U盘怎么办?实用解决方案全解析
当我们试图将一个大文件拷贝到U盘时,却突然跳出提示“对于目标文件系统目标文件过大”。这种情况让人感到迷茫,尤其是在急需备份或传输数据的时候。那么,文件太大为什么会无法拷贝到U盘?又该如何解决?本文将详细分析这背后的原因,并提供几个实用的方法,帮助你顺利将文件传输到U盘。
|
3月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
29天前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
29天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析

推荐镜像

更多