Java解析XML与生成XML文件

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: XML是eXtensible Markup Language(可扩展标记语言)的简写形式,它是一种元标记语言(meta-markup language),也就是说它没有一套能够适用于各个领域中所有用户的固守的标签和元素,相反,它允许开发者根据自已的需要定义自已的元素,XML中的X(eXtensible)就是说明了这一点。

XML是eXtensible Markup Language(可扩展标记语言)的简写形式,它是一种元标记语言(meta-markup language),也就是说它没有一套能够适用于各个领域中所有用户的固守的标签和元素,相反,它允许开发者根据自已的需要定义自已的元素,XML中的X(eXtensible)就是说明了这一点。

它的特点有:
1、XML使用Unicode字符集,可生成英文、中文、希腊文或梵文等多种语言。
2、可将多个来源(包括其他XML文档和二进制文件)汇合进一个XML文档。
3、可利用DTD或Schema(模式)管理一致性问题。DTD主要用于文档型文档,Schema主要用数据型文档。
4、具有很好的扩展性,可定义自已的元素和属性。
5、通过XML可从关系数据库管理系统中提取数据到结构化文档。它还被设计成可对各种数据对象进行操作。
6、在一个设计良好的XML应用中,XML标记不涉及文档如何显示,只表示文档的结构。
XML被设计用来存储、支持和交换数据,而不是用来显示数据的。通常,XML被用于数据交换,而不是数据存储。下图就很好的表示了xml作为电子数据交换的统一格式:

XML文档是什么?它有时是一个文件,有时是关系数据库中的一条记录,有时是由Object Request Broker(对象请求代理程序)传送的一个对象,有时是到达网络接口的一个字节流。XML文档可使不同系统、不同平台的数据实现统一接口,这就是XML真正的威力所在。下面列举几个使用XML的领域:
1、文档设计和管理,可利用XML维护公司的文档资料。
2、Web开发,利用XHTML和XSLT实现的Web页面扩展性更好,更容易维护。
3、数据库应用和程序开发,可从数据库中提取数据并生成XML文档,实现信息的跨平台、跨系统沟通。
4、定义其它语言,WML和WAP就是用通过XML建立的。

XML不是什么?
1、XML只是一种标记语言,不是一种编程语言。不存在一种编译器,把XML文档转化成可执行二进制代码。
2、XML不是一种网络传输协议,但通过网络协议传输的数据格式则可以是XML格式的。
3、XML不是数据库,不能替代Oracle或MySQL这类的关系数据库管理系统。
下面我们就来使用java代码来实现对XML文件的操作吧。
1、解析已经存在的XML文件:
下面的xml文件名称为target.xml,保存在我们的项目目录下,

<hibernate-mapping>
    <class name="com.tiger.target" table ="Table_tiger">
        <property name="name"></property>
        <property name="password" ></property>
    </class>

</hibernate-mapping>

解析代码:

package com.tiger.SAX;

import java.io.File;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class SAXTexst {

    public static void main(String[] args) throws DocumentException {
        // TODO Auto-generated method stub
        SAXReader reader=new SAXReader();
        Document document=reader.read(new File("target.xml"));
        //get the root Element
        Element rootElement=document.getRootElement();
        print(rootElement.getName());

        /*@Method 1
        //get child elements with Iterator function
        for(Iterator i=rootElement.elementIterator();i.hasNext();){
            Element element=(Element)i.next();
            print(element.getName());
            //if you want to get the clild's attributes
            for(Iterator j=element.attributeIterator();j.hasNext();){
                Attribute attribute=(Attribute) j.next();
                print(attribute.getName()+"-->>"+attribute.getValue());
            }
        */
            /**
             * So if you want to get All the element,just recurrence it;
             */

        /*@Method 2
            //Xpath Method to this
            //this is a way to get element directly
            List<Node> list=document.selectNodes("//hibernate-mapping/class/property");
            for(Node n:list){
                //this is a n important method!
                print(n.getName()+"----->>>"+n.valueOf("@name"));
            }

        */
    }

    public static  void print(Object o){
        System.out.println(o);
    }

}

里面有我自己做的一些注释,和简单的使用方法。
2、如何生成一个xml文件,也是有两种方式:


import java.io.FileWriter;
import java.io.IOException;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class CreateTest {

    SAXReader reader=null;
    Document document=null;

    public CreateTest() throws DocumentException {
        // TODO Auto-generated constructor stub
        reader=new SAXReader();
    }
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Document document=DocumentHelper.createDocument();
        Element root=document.addElement("tiger");
        Element childElement=root.addElement("class")
                .addAttribute("name","Tiger Guo")
                .addAttribute("password","*******")
                .addText("My name is Tiger Guo");
        //
        childElement.addElement("property").addAttribute("name", "username");

        /* Write method one 
        FileWriter out=new FileWriter("Tiger.xml");
        document.write(out);
        out.flush();
        out.close();
        */

        //write method Two:new a format to make your xml document looks better
        OutputFormat format=OutputFormat.createPrettyPrint(); 
        XMLWriter writer=new XMLWriter(new FileWriter("Tiger1.xml"),format);
        writer.write(document);
        writer.close();

    }

}

下面是生成的xml文件:
Tiger.xml:

<?xml version="1.0" encoding="UTF-8"?>
<tiger>
    <class name="Tiger Guo" password="*******">
        My name is Tiger Guo
        <property name="username" />
    </class>
</tiger>

Tiger1.xml:

<?xml version="1.0" encoding="UTF-8"?>

<tiger>
  <class name="Tiger Guo" password="*******">My name is Tiger Guo
    <property name="username"/>
  </class>
</tiger>

好了,xml文件的解析其实并不是很难,但是对于复杂的xml文件的生成和解析,采用这种方法确实显得有些吃力,代码展示的而仅仅是轻量级的操作时使用即可。

目录
相关文章
|
11天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
39 2
|
15天前
|
Java
轻松上手Java字节码编辑:IDEA插件VisualClassBytes全方位解析
本插件VisualClassBytes可修改class字节码,包括class信息、字段信息、内部类,常量池和方法等。
66 6
|
22天前
|
存储 Java 编译器
Java内存模型(JMM)深度解析####
本文深入探讨了Java内存模型(JMM)的工作原理,旨在帮助开发者理解多线程环境下并发编程的挑战与解决方案。通过剖析JVM如何管理线程间的数据可见性、原子性和有序性问题,本文将揭示synchronized关键字背后的机制,并介绍volatile关键字和final关键字在保证变量同步与不可变性方面的作用。同时,文章还将讨论现代Java并发工具类如java.util.concurrent包中的核心组件,以及它们如何简化高效并发程序的设计。无论你是初学者还是有经验的开发者,本文都将为你提供宝贵的见解,助你在Java并发编程领域更进一步。 ####
|
2天前
|
数据采集 存储 Web App开发
Java爬虫:深入解析商品详情的利器
在数字化时代,信息处理能力成为企业竞争的关键。本文探讨如何利用Java编写高效、准确的商品详情爬虫,涵盖爬虫技术概述、Java爬虫优势、开发步骤、法律法规遵守及数据处理分析等内容,助力电商领域市场趋势把握与决策支持。
|
7天前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
12天前
|
存储 算法 Java
Java Set深度解析:为何它能成为“无重复”的代名词?
Java的集合框架中,Set接口以其“无重复”特性著称。本文解析了Set的实现原理,包括HashSet和TreeSet的不同数据结构和算法,以及如何通过示例代码实现最佳实践。选择合适的Set实现类和正确实现自定义对象的hashCode()和equals()方法是关键。
23 4
|
16天前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
72 8
|
15天前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
38 2
|
15天前
|
Java 编译器 数据库连接
Java中的异常处理机制深度解析####
本文深入探讨了Java编程语言中异常处理机制的核心原理、类型及其最佳实践,旨在帮助开发者更好地理解和应用这一关键特性。通过实例分析,揭示了try-catch-finally结构的重要性,以及如何利用自定义异常提升代码的健壮性和可读性。文章还讨论了异常处理在大型项目中的最佳实践,为提高软件质量提供指导。 ####
|
20天前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
下一篇
无影云桌面