学习Java的第三十二天XML

XML简介

XML(EXtensible Markup Language),可扩展标记语言

特点

XML与操作系统、编程语言的开发平台无关
实现不同系统之间的数据交换

作用

数据交互
配置应用程序和网站
Ajax基石

XML文档结构

声明:<?xml version="1.0" encoding="UTF-8"?>
文档元素描述信息

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <!--图书信息 -->
    <book id="bk101">
        <author>王珊</author>
        <title>.NET高级编程</title>
        <description>包含C#框架和网络编程等</description>
    </book>
    <book id="bk102">
        <author>李明明</author>
        <title>XML基础编程</title>
        <description>包含XML基础概念和基本作用</description>
    </book>
</books>

XML标签

XML文档内容由一系列标签元素组成:<元素名 属性名=“属性值”>元素内容</元素名>
空元素:
<name>  </name>
<name></name>
<name/>

注意:1.属性值用双引号包裹  2.一个元素可以有多个属性 3.属性值中不能直接包含<、“、& 4.不建议使用的字符:‘、>

XML编写注意事项

    所有XML元素都必须有结束标签
    XML标签对大小写敏感
    XML必须正确的嵌套
    同级标签以缩进对齐
    元素名称可以包含字母、数字或其他的字符
    元素名称不能以数字或者标点符号开始
    元素名称中不能含空格

命名空间

<?xml version="1.0" encoding="UTF-8"?>
<batchCompany xmlns="http://www.Aptech_edu.ac"
    xmlns:tea="http://www.tea.org">
    <batch-list>
        <batch type="thirdbatch">第三批次</batch>
        <batch tea:type="thirdbatch">第三批茶</batch>
        <batch>午班批次</batch>
    </batch-list>
</batchCompany>

除非带有前缀,否则属性属于所属的元素的命名空间

作用:解决在复杂、大型XML文件中,出现名称相同,但是含义不同的元素

比如:

<?xml version="1.0" encoding="UTF-8"?>
<cameras xmlns:canon="http://www.canon"
    xmlns:nikon="http://www.nikon.com">
    <canon:camera prodID="P663" name="Camera傻瓜相机"/>
    <nikon:camera prodID=“K29B3” name=“Camera超级35毫米相机"/>
</cameras>

XML解析器

解析器类型

非验证解析器---检查文档格式是否良好
验证解析器---使用DTD检查文档的有效性

解析XML技术

DOM

基于XML文档树结构的解析
适用于多次访问的XML文档
特点:比较消耗资源

SAX

基于事件的解析
适用于大数据量的XML文档
特点:占用资源少,内存消耗小

DOM4J

非常优秀的Java XML API
性能优异、功能强大
开放源代码

DOM解析XML

DOM介绍

    文档对象模型(Document Object Model)
    DOM把XML文档映射成一个倒挂的树

<book >
    <title>三国演义</title>
    <author>罗贯中</author>
    <price>30元</price>
</book>

  

 常用接口介绍

DOM解析包:org.w3c.dom

 DOM解析XML文件步骤

1.创建解析器工厂对象
2.解析器工厂对象创建解析器对象
3.解析器对象指定XML文件创建Document对象
4.以Document对象为起点操作DOM树

<?xml version="1.0" encoding="UTF-8"?>
<PhoneInfo>
	<Brand name="华为">
		<Type name="U8650" />
		<Type name="HW123" />
		<Type name="HW321" />
	</Brand>
	<Brand name="苹果">
		<Type name="iPhone4" />
	</Brand>
</PhoneInfo>

 

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

public class XmlDocumentDemo02 {
	//定义一个方法实现获取Document对象操作
	public Document getDocument(String url){
		Document document = null;
		//创建解析器工厂对象
		DocumentBuilderFactory bdf = DocumentBuilderFactory.newInstance();
		//通过解析器工厂对象创建解析器对象
		try {
			DocumentBuilder db = bdf.newDocumentBuilder();
			document = db.parse(url);
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return document;
	}
}
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Test {
	public static void main(String[] args) {
		//创建XMLDocumentDemo02对象
		XmlDocumentDemo02 xdd = new XmlDocumentDemo02();
		//调用getDocument(string url)将"收藏信息.xml"文件转换成Document对象
		Document document = xdd.getDocument("收藏信息.xml");
		
		//获取数据
		NodeList brands = document.getElementsByTagName("Brand");
		for (int i = 0; i < brands.getLength(); i++) {
			//Node是一个节点接口,节点包括元素节点,属性节点,文本节点,而现在我们获取的是brand节点,所以需要进行类型转换
			Node node = brands.item(i);
			Element brand = (Element)node;
			String value=brand.getAttribute("name");
			System.out.println(value);
		}
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340