Java_XML解析精讲

举报
红目香薰 发表于 2023/03/23 22:31:35 2023/03/23
【摘要】 Java_XML解析精讲

XML简介

        可扩展标记语言 (Extensible Markup Language, XML) ,标准通用标记语言的子集,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 可扩展性良好,内容与形式分离,遵循严格的语法要求,保值性良好等优点。
        在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。

XML特征

XML具有以下特点:
(1) XML可以从HTML中分离数据。即能够在HTML文件之外将数据存储在XML文档中,这样可以使开发者集中精力使用HTML做好数据的显示和布局,并确保数据改动时不会导致HTML文件也需要改动,从而方便维护页面。XML也能够将数据以“数据岛”的形式存储在HTML页面中,开发者依然可以把精力集中到使用HTML格式化和显示数据上。
(2) XML可用于交换数据。基于XML可以在不兼容的系统之间交换数据,计算机系统和数据库系统所存储的数据有多种形式,对于开发者来说,最耗时间的工作就是在遍布网络的系统之间交换数据。把数据转换为XML格式存储将大大减少交换数据时的复杂性,还可以使这些数据能被不同的程序读取。
(3) XML可应用于B2B中。例如在网络中交换金融信息, 目前XML正成为遍布网络的商业系统之间交换信息所使用的主要语言,许多与B2B有关的完全基于XML的应用程序正在开发中。
(4)利用XML可以共享数据。XML数据以纯文本格式存储,这使得XML更易读、更便于记录、更便于调试,使不同系统、不同程序之间的数据共享变得更加简单。
(5) XML可以充分利用数据。XML是与软件、硬件和应用程序无关的,数据可以被更多的用户、设备所利用,而不仅仅限于基于HTML标准的浏览器。其他客户端和应用程序可以把XML文档作为数据源来处理,就像操作数据库一样,XML的数据可以被各种各样的“阅读器”处理。
(6) XML可以用于创建新的语言。比如,WAP和WML语言都是由XML发展来的。WML(Wireless Markup Language,无线标记语言)是用于标识运行于手持设备上(比如手机)的Internet程序的工具,它就采用了XML的标准。
总之,XML使用一个简单而又灵活的标准格式,为基于Web的应用提供了一个描述数据和交换数据的有效手段。但是,XML并非是用来取代HTML的。HTML着重如何描述将文件显示在浏览器中,而XML与SGML相近,它着重描述如何将数据以结构化方式表示。

XML格式

        XML文件格式是纯文本格式,在许多方面类似于HTML,XML由XML元素组成,每个XML元素包括一个开始标记(),一个结束标记()以及两个标记之间的内容,例如,可以将XML元素标记为价格、订单编号或名称。标记是对文档存储格式和逻辑结构的描述。在形式上,标记中可能包括注释、引用、字符数据段、起始标记、结束标记、空元素、文档类型声明( DTD)和序言。
具体规则如下:

1、必须有声明语句。
XML声明是XML文档的第一句,其格式如下:

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

2、注意大小写
在XML文档中,大小写是有区别的。“A”和“a”是不同的标记。注意在写元素时,前后标记的大小写要保持一致。最好养成一种习惯,或者全部大写,或者全部小写,或者大写第一个字母,这样可以减少因为大小写不匹配而产生的文档错误。
3、XML文档有且只有一个根元素
良好格式的XML文档必须有一个根元素,就是紧接着声明后面建立的第一个元素,其他元素都是这个根元素的子元素,根元素完全包括文档中其他所有的元素。根元素的起始标记要放在所有其他元素的起始标记之前;根元素的结束标记要放在所有其他元素的结束标记之后。
4、属性值使用引号
在HTML代码里面,属性值可以加引号,也可以不加。但是XML规定,所有属性值必须加引号(可以是单引号,也可以是双引号,建议使用双引号),否则将被视为错误。
5、所有的标记必须有相应的结束标记
在HTML中,标记可以不成对出现,而在XML中,所有标记必须成对出现,有一个开始标记,就必须有一个结束标记,否则将被视为错误。
6、所有的空标记也必须被关闭
空标记是指标记对之间没有内容的标记,比如“”等标记。在XML中,规定所有的标记必须有结束标记。

示例:读取XML示例

<?xml version="1.0" encoding="UTF-8"?>
<users>
	<user>
		<id>1</id>
		<userName>admin</userName>
		<sex>boy</sex>
		<age>20</age>
		<introduce>管理员</introduce>
	</user>
	<user>
		<id>1</id>
		<userName>zhangsan</userName>
		<sex>boy</sex>
		<age>22</age>
		<introduce>张三先生</introduce>
	</user>
</users>

创建XML文件示例

package com.item.demo;

import java.io.FileWriter;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class Demo1 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//内存中创建Document对象
		Document doc=DocumentHelper.createDocument();
		//创建根节点
		doc.addElement("root");
		//创建输出流
		OutputFormat format = OutputFormat.createPrettyPrint();
		//修改输出流编码格式,这里UTF-8用于匹配系统默认编码格式
		format.setEncoding("UTF-8");
		//创建保存文件
		FileWriter fileWriter = new FileWriter("./src/com/item/demo/Demo.xml");
		//将输出流匹配到文件流中
		XMLWriter xmlWriter = new XMLWriter(fileWriter,format);
		// 设置是否转义,默认使用转义字符
		xmlWriter.setEscapeText(false);
		//写入
		xmlWriter.write(doc);
		//刷新关闭
		xmlWriter.flush();
		xmlWriter.close();
	}

}

文件创建效果:

注: 文件无法在ide工具中看到,只能打开文件夹进行查阅。

读取XML示例

这里的XML在上文中给予了。直接复制到当前目录下即可,我的包名是【com.item.demo】,xml文件名称【Users.xml】

package com.item.demo;

import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Demo {

	public static void main(String[] args) throws DocumentException {
		// TODO Auto-generated method stub
		File file = new File("src/com/item/demo/Users.xml");
		SAXReader reader=new SAXReader();
		Document document=reader.read(file);
		//获取根节点
		Element root = document.getRootElement();
		System.out.println("根节点名称:"+root.getName());
		//获取根节点的子节点
		List<Element> list = root.elements();
		for (Element o : list) {
			System.out.println(o.element("id").getText());
			System.out.println(o.element("userName").getText());
			System.out.println(o.element("sex").getText());
			System.out.println(o.element("age").getText());
			System.out.println(o.element("introduce").getText());
		}
	}

}

解析效果:

增删改操作示例:

示例前提,根据Demo1创建一个有基础结构的XML的文件,否则会报异常。

package com.item.demo;

import java.io.IOException;

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

public class Demo4 {

	public static void main(String[] args) throws DocumentException, IOException {
		// TODO Auto-generated method stub
		String fileUrl="src/com/item/demo/Demo.xml";
		SAXReader reader=new SAXReader();
		Document document=reader.read(fileUrl);
		Element rootElement = document.getRootElement();
		//增加了一个users
		Element addElement = rootElement.addElement("user");
		addElement.addElement("id").addText("1");
		addElement.addElement("userName").addText("阿刁");
		addElement.addElement("sex").addText("女");
		addElement.addElement("age").addText("18");
		addElement.addElement("introduce").addText("自由的鸟");
		//增加了一个用于修改和删除的user
		Element addDelElement = rootElement.addElement("user");
		addDelElement.addElement("id").addText("2");
		//修改
		Element updateElement = addDelElement.addElement("userName");
		updateElement.addText("浓睡不消残酒");
		updateElement.setText("雨的凉薄");
		addDelElement.addElement("sex").addText("女");
		addDelElement.addElement("age").addText("17");
		addDelElement.addElement("introduce").addText("打湿的羽毛");
		XMLWrite.WriteUtf8(document, fileUrl);
	}
}

示例效果:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。