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

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

简介

XML是一种可扩展标记语言,常用于数据的存储和传输。XML的一个重要的应用场景是作为数据传输的格式,即数据序列化。

Java提供了许多支持XML的API,其中常用的是DOM和SAX。

DOM:将XML文件整个加载到内存中,并生成与XML结构对应的DOM树,可以方便的通过节点操作修改XML内容。但是会占用大量的内存,并且在大文件或者复杂结构的文件中效率不高。

SAX: 基于事件的解析方式,不会一次性将整个XML文件读入内存,而是边读边解析,因此可以很好的处理大文件和复杂结构的文件,但是没有DOM的易用性。

解析XML

DOM

Java提供了javax.xml.parsers包中的DocumentBuilderFactory和DocumentBuilder类来对XML文件进行解析。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("example.xml"));

以上代码将example.xml文件加载进内存并解析成一个DOM树,可以通过节点遍历获取XML文件信息。

NodeList nodeList = document.getElementsByTagName("book");
for(int i=0;i<nodeList.getLength();i++){
    Element element = (Element)nodeList.item(i);
    String id = element.getAttribute("id");
    String author = element.getElementsByTagName("author").item(0).getTextContent();
    String title = element.getElementsByTagName("title").item(0).getTextContent();
    System.out.println("id:"+id+", author:"+author+", title:"+title);
}

以上代码输出XML文件中book节点下的id、author、title信息。

SAX

Java提供了org.xml.sax包中的SAXParser类来对XML文件进行解析。

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler(){
    boolean bookFlag = false;
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        if(qName.equalsIgnoreCase("book")){
            bookFlag = true;
            System.out.println("Book ID :" + attributes.getValue("id"));
        }
        if(qName.equalsIgnoreCase("author") && bookFlag){
            System.out.println("Author : ");
        }
        if(qName.equalsIgnoreCase("title") && bookFlag){
            System.out.println("Title : ");
        }
    }
    public void characters(char ch[], int start, int length) throws SAXException {
        if(bookFlag){
            System.out.println(new String(ch, start, length));
            bookFlag = false;
        }
    }
};
saxParser.parse(new File("example.xml"), handler);

以上代码将example.xml文件不会一次性加载到内存,而是边读边解析。在SAX解析器中,当解析到节点开始标签时会调用startElement方法,在节点结束标签时会调用endElement方法,在节点内容时会调用characters方法。

生成XML

Java提供了javax.xml.transform包中的TransformerFactory和Transformer类来生成XML文件。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element root = document.createElement("library");
document.appendChild(root);
Element book1 = document.createElement("book");
book1.setAttribute("id","001");
Element author1 = document.createElement("author");
author1.setTextContent("Author 1");
Element title1 = document.createElement("title");
title1.setTextContent("Title 1");
book1.appendChild(author1);
book1.appendChild(title1);
root.appendChild(book1);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(new DOMSource(document), new StreamResult(new File("example2.xml")));

以上代码生成了example2.xml文件。

示例说明

解析XML示例

假设有一个example.xml文件,内容如下:

<library>
    <book id="001">
        <author>Author 1</author>
        <title>Title 1</title>
    </book>
    <book id="002">
        <author>Author 2</author>
        <title>Title 2</title>
    </book>
</library>

通过DOM解析方式可以输出example.xml中所有book节点的id、author、title信息,输出结果:

id:001, author:Author 1, title:Title 1
id:002, author:Author 2, title:Title 2

通过SAX解析方式可以输出example.xml中所有book节点的id、author、title信息,输出结果:

Book ID :001
Author : 
Author 1
Title : 
Title 1
Book ID :002
Author : 
Author 2
Title : 
Title 2

生成XML示例

通过以下代码生成了example2.xml文件,内容如下:

<library>
  <book id="001">
    <author>Author 1</author>
    <title>Title 1</title>
  </book>
</library>

可以发现,通过生成XML示例,成功创建了一个library节点,library节点下有一个book节点,book节点有id、author、title三个子节点,成功实现了通过Java生成XML文件的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现解析并生成xml原理实例详解 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • HTML中的表格元素介绍

    当我们需要在网页中展示有序的数据的时候,可以使用HTML表格元素来实现。在HTML中,表格元素是由<table> 标签和其它标签组成的,下面对表格元素的使用进行详细介绍。 \<table> 标签 <table>标签用来创建一个HTML表格,它是所有表格元素的容器。 语法规则 <table> <!– 表格…

    html 2023年5月30日
    00
  • 小米系统app怎么用?小米系统独立app使用要求介绍

    以下是小米系统app的使用攻略: 打开小米系统app:首先,打开小米手机上的小米系统app。您可以在主屏幕或应用程序列表中找到它。 导航到所需的功能:在小米系统app中,您可以找到各种功能和设置。使用导航菜单或搜索功能,找到您需要的功能。 使用小米系统app:一旦您找到所需的功能,您可以使用小米系统app来执行各种任务。例如,您可以使用小米系统app来管理您…

    html 2023年5月17日
    00
  • React详细讲解JSX和组件的使用

    对于“React详细讲解JSX和组件的使用”,可以分为以下几个部分进行讲解: 1. JSX的基本用法 JSX是一种JavaScript和XML的混合语法,用于在React中描述UI组件的结构和样式。在使用JSX时,需要注意以下几点: JSX语法类似于HTML,但是它是JavaScript代码,需要使用花括号{}来表示JSX内部的JavaScript表达式。 …

    html 2023年5月30日
    00
  • Spring AOP 切面@Around注解的用法说明

    Spring AOP是面向切面编程的一种实现,主要用于处理横切关注点(Cross-Cutting Concerns)的问题,它可以支持在程序执行的不同阶段插入增强的逻辑,从而实现对代码进行统一的管理。在Spring AOP中,我们可以通过@Around注解定义切面,本文将针对@Around注解的使用详细说明。 1. @Around注解的基本用法 @Aroun…

    html 2023年5月30日
    00
  • 解决Tomcat10 Catalina log乱码问题

    解决Tomcat10 Catalina log乱码问题,可以按照以下步骤进行操作: 第一步:修改Tomcat的日志配置文件 在Tomcat安装目录下,找到conf文件夹下的logging.properties文件,使用文本编辑器打开此文件。 找到以下配置: 1catalina.org.apache.juli.FileHandler.encoding=UTF-…

    html 2023年5月31日
    00
  • php中json_encode UTF-8中文乱码的更好解决方法

    问题描述:在PHP中,有时候使用json_encode函数生成的JSON字符串中,中文会出现乱码,这给数据处理和展示带来了很大的不便。那么,该如何解决这个问题呢? 解决方法: 设置json_encode函数中文编码格式 PHP默认的编码格式为ISO-8859-1,而JSON字符串的默认编码格式为UTF-8,所以需要手动设置编码格式。可以使用json_enco…

    html 2023年5月31日
    00
  • 关于HTML编码导致的乱码问题

    关于HTML编码导致的乱码问题,主要是出现在浏览器无法正确解析特殊字符编码的情况下,导致浏览器内显示的文本出现了乱码。在HTML中常见的特殊字符包括<、>、&、空格、换行符等符号。为了避免这些特殊字符的冲突,我们需要对这些字符进行转义处理。下面是解决这个问题的攻略: 一、使用合适的编码方式 在HTML文件的头部声明正确的字符编码,如 UT…

    html 2023年5月31日
    00
  • HTML表格标记教程(31):单元格的宽度和高度属性WIDTH、HEIGHT

    HTML表格标记教程(31):单元格的宽度和高度属性WIDTH、HEIGHT HTML的表格是网页设计中最常用的元素之一,它可以将数据与其他内容整齐地排列成行和列。表格的单元格可以通过使用HTML属性来设置宽度和高度。 WIDTH 属性用于设置单元格的宽度,它的值可以是像素(px)或百分比(%)。除了设置每个单元格的宽度,还可以设置表格的总宽度。如果不指定表…

    html 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部