学习Java的第三十二天。。。(XML)

本文介绍了XML的特性、应用场景,包括数据交互和配置网站,重点讲解了XML文档结构、标签规则,并详细解读了DOM解析器的工作原理和使用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放在糖果旁的是我很想回忆的甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值