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日

相关文章

  • Java解析XML的四种方式

    下面就来详细讲解一下Java解析XML的四种方式。 一、DOM方式 DOM方式是将整个XML文档读入内存,形成一棵树状结构(DOM树),然后对整个树进行操作。对于较小的XML文件,DOM方式效率较高,但是对于较大的XML文件则会消耗较多的内存。下面是一个DOM方式解析XML的示例: // 创建一个DocumentBuilderFactory对象 Docume…

    html 2023年5月30日
    00
  • Android控件BottomSheet实现底边弹出选择列表

    下面是详细讲解 “Android控件BottomSheet实现底边弹出选择列表”的完整攻略。 什么是BottomSheet BottomSheet是安卓提供的一个UI控件,可以实现在屏幕底部弹出窗口,通常用于展示一些与主要内容相关的操作选项或者附属功能。BottomSheet有两种类型:持续BottomSheet和模态BottomSheet。持续Bottom…

    html 2023年5月30日
    00
  • java 值Document解析xml详细介绍

    Java 值 Document 解析 XML 详细介绍 目录 介绍 Document 对象 解析 XML 示例说明 总结 1. 介绍 XML 是一种标记语言,它常用于将数据从一个程序传输到另一个程序中。Java 提供了许多方法来解析 XML 文件,其中最常用的方法是使用 javax.xml.parsers.DocumentBuilder 和 org.w3c.…

    html 2023年5月31日
    00
  • Android 活动条ActionBar的详解及实例代码

    Android 活动条ActionBar的详解及实例代码 什么是ActionBar ActionBar是Android系统自带的一种导航栏控件,通常用于在应用程序的最顶部显示标题、选项菜单和其他操作按钮。 如何使用ActionBar 使用ActionBar需要引入androidx.appcompat.widget.Toolbar这个类,并在布局文件中添加相应…

    html 2023年5月30日
    00
  • win10怎么分屏? win10分屏快捷键的使用方法

    以下是Win10分屏的完整攻略: 使用鼠标分屏:在Windows 10中,您可以使用鼠标将窗口分屏。首先,打开需要分屏的窗口。然后,将鼠标指针移到窗口的标题栏上,按住左键不放,并将窗口拖动到屏幕的左侧或右侧。当鼠标指针到达屏幕的左侧或右侧时,会出现一个半透明的矩形框,松开鼠标左键即可将窗口分屏。 使用Win键分屏:在Windows 10中,您还可以使用Win…

    html 2023年5月17日
    00
  • 整理一下常见的IE错误

    当用户使用Internet Explorer(IE)浏览器浏览网页时,可能会遇到一些常见的错误。在网站开发过程中,您需要及时发现并解决这些错误,以免影响用户的使用体验。下面是整理常见的IE错误的完整攻略: 步骤一:搜集IE错误信息 在用户遇到问题时,您需要获得错误信息来确定问题所在。IE的开发人员工具可以为您提供此信息。以下是打开IE开发人员工具的方法: 打…

    html 2023年5月30日
    00
  • cmd模式下中文乱码的解决方法(注册表)

    当我们在cmd模式下输入中文字符时,可能会发生乱码现象,这是因为cmd默认使用的字符编码为ANSI,而中文字符通常需要使用UTF-8编码。下面就是针对这个问题的解决方案: 1. 修改注册表 1.1 打开注册表编辑器:在Windows搜索栏中输入regedit,点击打开注册表编辑器。 1.2 找到HKEY_LOCAL_MACHINE\Software\Micr…

    html 2023年5月31日
    00
  • 3dsmax两个物体怎么对齐?

    3dsmax两个物体怎么对齐? 在3dsmax中,您可以使用多种方法对齐两个物体。以下是关于如何对齐两个物体的攻略,包括以下几个步骤: 步骤1:选择要对齐的物体 在3dsmax中,您需要选择要对齐的物体。以下是选择物体的步骤: 打开3dsmax软件。 打开场景文件。 选择要对齐的物体。 步骤2:使用对齐工具 在3dsmax中,有多种对齐工具可供选择。以下是使…

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