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 2023年5月18日
    00
  • vscode怎么使用? vscode基础使用教程

    以下是关于VSCode的详细攻略: VSCode怎么使用? 下载并安装VSCode:首先,您需要从VSCode官方网站(https://code.visualstudio.com/)下载并安装VSCode。 打开VSCode:安装完成后,打开VSCode。 创建或打开项目:在VSCode中,您可以创建新项目或打开现有项目。要创建新项目,请单击“文件”菜单,然…

    html 2023年5月17日
    00
  • java、freemarker保留两位小数

    下面是Java和Freemarker保留小数的攻略,分别将涉及到Java程序和Freemarker模板的实现: Java保留两位小数 在Java中保留小数的常用方式是使用DecimalFormat类,以下是具体实现步骤: 创建DecimalFormat的实例。示例代码如下: DecimalFormat df = new DecimalFormat(&quot…

    html 2023年5月30日
    00
  • Flash怎么使用代码绘制矩形和椭圆?

    Flash怎么使用代码绘制矩形和椭圆? 在Flash中,您可以使用ActionScript 3.0代码绘制矩形和椭圆。以下是关于如何使用代码绘制矩形和椭圆的攻略,包括以下几个步骤: 步骤1:创建新的Flash文件 在使用代码绘制矩形和椭圆之前,您需要创建一个新的Flash文件。以下是创建新的Flash文件的步骤: 打开Flash软件。 单击“文件”菜单。 选…

    html 2023年5月17日
    00
  • 怎么看手机生产日期 手机生产日期查询方法

    以下是查看手机生产日期的详细攻略: 步骤1:查看手机IMEI号码 打开您的手机拨号界面,输入“*#06#”号码,即可查看您的手机IMEI号码。 如果您的手机无法使用拨号界面查看IMEI号码,可以在手机设置中查找“关于手机”或“状态”选项,然后查看IMEI号码。 步骤2:查询手机生产日期 打开您的浏览器,访问IMEI查询网站(例如https://www.ime…

    html 2023年5月17日
    00
  • Win10系统PowerShell窗口字体怎么修改?

    以下是Win10系统PowerShell窗口字体修改的攻略: 使用PowerShell窗口的属性设置:您可以通过PowerShell窗口的属性设置来修改字体。请按照以下步骤进行操作: 打开PowerShell窗口。 点击窗口左上角的图标,选择“属性”。 在“属性”窗口中,选择“字体”选项卡。 在“字体”选项卡中,选择您想要的字体和字号。 点击“确定”按钮保存…

    html 2023年5月17日
    00
  • word2016空白处下划线不显示怎么办?

    以下是“word2016空白处下划线不显示怎么办?”的完整攻略: word2016空白处下划线不显示怎么办? 如果您在Word 2016中输入下划线,但是在空白处下划线不显示,可能是由于多种原因引起的。以下是一些可能的解决方案: 检查字体:首先,检查您正在使用的字体是否支持下划线。有些字体不支持下划线,因此在这些字体中输入下划线时,下划线可能不会显示。如果您…

    html 2023年5月18日
    00
  • iPhone11字体大小怎么调?苹果手机调节字体大小的三种方法

    iPhone11是苹果公司推出的一款智能手机,用户可以通过多种方式调节字体大小,以适应不同的使用场景和需求。下面是iPhone11调节字体大小的三种方法: 方法1:使用系统设置 打开iPhone11的“设置”应用程序。 点击“显示与亮度”选项。 在“文本大小”选项下,使用滑块调节字体大小。 您可以通过预览文本框中的文本,调整字体大小,直到满意为止。 以下是一…

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