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

yizhihongxing

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日

相关文章

  • php查询mssql出现乱码的解决方法

    PHP查询MSSQL出现乱码的解决方法 问题描述 在使用PHP代码查询MSSQL数据库时,有时候查询结果或者查询参数会出现乱码的情况,如何解决这个问题呢? 解决方法 1. 设置MSSQL编码 在连接MSSQL数据库时,可以设置连接的编码,确保查询以及存储的数据是以正确的编码方式进行的。在PHP中,可以使用 mssql_connect() 和 mssql_pc…

    html 2023年5月31日
    00
  • 做网站用UTF-8编码还是GB2312编码?

    讲解“做网站用UTF-8编码还是GB2312编码?”需要从以下几个方面入手: 了解UTF-8和GB2312编码的基本概念 UTF-8编码和GB2312编码的区别 选择合适的编码格式的考虑因素 示例说明 1. UTF-8和GB2312编码的基本概念 UTF-8编码是一种Unicode字符编码方案,它可以将Unicode字符集中的任意字符编码为1-4字节的字符序…

    html 2023年5月31日
    00
  • c#如何使用 XML 文档功能

    使用XML文档 XML是一种用于存储和传输数据的标准格式,它和HTML类似,但是更加灵活和扩展性更强,它是可以自定义标签的,并且可以添加属性,以便更好的描述数据和数据的关系。 在C#中,可以使用System.Xml命名空间提供的类库来实现XML的创建、修改、查询等操作。下面是XML文档的一个简单示例: <?xml version="1.0&q…

    html 2023年5月30日
    00
  • VLC播放器播放电影字幕出现方块乱码怎么办?

    首先,我们需要了解字幕文件的编码方式和VLC播放器的设置。 VLC播放器默认情况下会自动检测字幕文件的编码方式,但是有些字幕文件的编码方式并不常见,或者是由于某些原因导致编码出现错误时,就有可能出现方块乱码的情况。为了解决这个问题,我们可以手动设置VLC播放器的字幕编码方式。 以下是具体步骤: 1.打开VLC播放器,单击左上角的“工具”菜单,然后选择“首选项…

    html 2023年5月31日
    00
  • 华为一镜到底支持机型有哪些? 华为一镜到底主题设置技巧

    以下是“华为一镜到底支持机型有哪些? 华为一镜到底主题设置技巧”的完整攻略: 华为一镜到底支持机型有哪些? 华为一镜到底主题设置技巧 华为一镜到底是一款非常受欢迎的相机应用,它可以实现一镜到底的效果,让用户可以轻松拍摄高质量的照片。以下是关于华为一镜到底支持机型和主题设置技巧的详细攻略。 华为一镜到底支持机型 华为一镜到底支持的机型如下: 华为P30 Pro…

    html 2023年5月18日
    00
  • ps怎么做出公章-教你用PS制作逼真的公章教程

    以下是使用Photoshop制作公章的详细攻略: 步骤1:准备工作 打开Photoshop软件,并创建一个新的文档。 设置文档的大小和分辨率,以适应您需要制作的公章大小。 在工具栏中选择“椭圆形工具”,并绘制一个圆形。 在图层面板中,选择“新建图层”,并将其命名为“外框”。 步骤2:制作公章外框 在“外框”图层上,使用“椭圆形选框工具”绘制一个圆形选择区域。…

    html 2023年5月17日
    00
  • C# XmlDocument操作XML案例详解

    C# XmlDocument是一个在线文档处理组件,可以让开发人员方便地操作XML文档。以下是一些基本的操作,包括创建、读取和写入XML文件。 创建一个XML文档 我们可以使用XmlDocument对象来创建XML文档。 XmlDocument doc = new XmlDocument(); XmlElement rootElement = doc.Cre…

    html 2023年5月30日
    00
  • 分割GBK中文遭遇乱码的解决方法

    问题描述: 在处理GBK编码的中文文本文件时,常常会遇到中文字符乱码的问题。这是由于GBK编码的中文字符占用了两个字节,而一些编辑器或工具无法正确显示这些字符,导致出现乱码。那么如何解决这种问题呢? 解决方法: 在处理GBK编码的中文文本文件时,需要注意以下两点: 1.读取数据时需要将编码设置为GBK 如果使用Python进行文件读取,可以在打开文件时指定编…

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