1.xml简介(1)

1.xml简介

1.1 什么是xml?

xml是可扩展的标记语言。

1.2 xml有什么作用?

xml主要的作用:

1、用来保存数据,而且这些数据具有自我描述性。

2、它还可以作为项目或者模块的配置文件。

3、还可以作为网络传输的格式。(现在JSON为主)

1.3 xml语法

1.文档声明

2.元素(标签)

3.xml属性

4.xml注释

5.文本区域(CDATA区)

1.4 文档声明

我们先创建一个简答的xml文件,用来描述图书信息。

1)创建一个xml文件,src–>other–>file–>books.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--  
	这是xml的注释, 
	xml声明 
	version 版本号
	encoding xml的文件编码
	standalone="yes/no"  表示这个xml文件是否独立的xml 
	而且 <?xml 要连在一起写,否则会报错 
 -->
 	
 	<books>
 		<book id="book1"><!--  book1 标签描述一本图书,id属性描述的是图书的编号 -->
 			<name>java编程思想</name> <!--  name标签描述的是图书的名称 -->
 			<author>詹姆斯搞死你</author><!-- author意思是作者, 描述图书的作者  -->
 			<pirce>99.9</pirce><!--  price单词的意思是单价,描述图书的价格 -->
 		</book>
 		
 		<book id="book2"><!--  book1 标签描述一本图书,id属性描述的是图书的编号 -->
 			<name>java从入门到放弃</name> <!--  name标签描述的是图书的名称 -->
 			<author>健哥</author><!-- author意思是作者, 描述图书的作者  -->
 			<pirce>58.9</pirce><!--  price单词的意思是单价,描述图书的价格 -->
 		</book>
 	</books>
1.4.1 注释

html和xml注释的是一样:

1.4.2 元素(标签)

html标签:

格式:<标签名>数据</标签名>

单标签:<标签名/>

双标签:<标签名>数据</标签名>

标签名大小写不敏感

标签有属性,有基本属性和事件属性

标签要闭合(不关闭,html中不报错,但是我们要养成良好的书写习惯,闭合)

1)什么是xml元素

xml元素是指的从开始标签直到结束标签的部分。

元素可包含其他元素,文本或者两者的混合物,元素也可以拥有属性。

元素我们可以简单的理解为标签,Element翻译元素。

2)xml命名规则

xml元素必须遵守以上命名规则:

2.1名称可以包含字母、数字以及其他的字符

2.2名称不能为数字或者标点符开始

2.3名称不能为字符"xml"或者xml,XML开始

2.4名称不能包含空格

3)xml中的元素(标签)也可以分成单标签和双标签

1.4.3 xml属性

xml的标签属性和html标签属性是非常类似的,属性可以提供元素的额外信息,

在标签上可以书写属性:

一个标签可以书写多个属性,每个属性的值必须使用引号引起来。

xml属性必须加引号,属性值必须被引号包围,不过单引号和双引号都可以使用。

1.4.4 语法规则

所有xml元素都必须有闭合标签

xml标签对大小写敏感

xml必须正确嵌套

xml文档必须有根元素

  1. 根元素就是顶级元素
  2. 没有父标签的元素,叫顶级元素
  3. 根元素是没有父标签的顶级元素,而且是唯一一个才行。
1.4.5 xml中特殊字符
1.4.6 文本区域(CDATA区)

CDATA语法可以告诉xml解析器,CDATA里的文本内容,只是纯文本,不需要xml语法解析。

<book id="book2"><!--  book1 标签描述一本图书,id属性描述的是图书的编号 -->
 			<name>java从入门到放弃</name> <!--  name标签描述的是图书的名称 -->
			<author>	<!-- author意思是作者, 描述图书的作者  -->
			 <![CDATA[  
			 		<<<<<<<<<<<<<<<刘德华>>>>>>>>>>>>>>>>>>
			 ]]>
			 </author>		
		
 			<pirce>58.9</pirce><!--  price单词的意思是单价,描述图书的价格 -->
 		</book>

CDATA文本区,里面的内容不会被解析,只会把他们当做纯文本。

2.xml解析技术介绍

xml可扩展的标记语言,不管是html还是xml文件他们都是标记性文档,都可以使用W3C组织指定的dom技术来解析。

dom将xml文档作为一个树形结构,而树叶被定义为节点。

早期JDK为我们提供了两种XML解析技术DOM和SAX简介。

dom解析技术是由w3c组织制定的,而所有的编程语言对这个解析技术使用了自己语言的特点进行实现,java对dom技术解析标记也做了实现。

sun公司在JDK5版本对dom解析技术进行了升级sax。

sax解析,他跟w3c制定的解析不太一样,它是一行一行的读取xml文件进行解析的,不会创建大量的dom对象,所在它在解析xml的时候,在内存的使用上和性能上,都优于dom解析。

解析XML的方式

1.DOM:将标记语言一次性加载进内存,在内存中形成一颗dom树。

优点:操作方便,可以对文档进行CRUD的所有操作。

缺点:占内存。

2.SAX:逐行读取,基于事件驱动。

优点:不占内存。

缺点:只能读取,不能增删改。

xml常见解析器

1.JAXP:sun公司提供的解析器,支持dom和sax两种思想。

2.DOM4J:一款非常优秀的解析器。

  • jdom在dom基础上进行了封装。
  • dom4j:有对jdom进行了封装。

3.JSOUP:JSOUP是一款java的HTML解析器,可以直接解析某个url地址,HTML文本内容,它提供了一套非常省事的API,可以通过DOM,CSS以及类似于jquery的操作方式来取出和操作数据。

4.PULL:android操作系统内置的解析器,SAX方式。

3.DOM4J的解析技术

由于dom4j它不是sun公司的拘束,属性第三方公司的技术,我们需要使用dom4j,就需要dom4j官网下载dom4j的jar包。

3.1 dom4j编程步骤

1.先加载xml文件创建document对象

2.通过document对象拿到根元素对象

3.通过根元素.elements(标签名),可以返回一个集合,这个集合里面放着,所有你指定的标签名的元素对象

4.找到你想要修改,删除的资源上,进行相应的操作。

3.2 获取document对象

创建一个lib目录,添加dom4j的jar包,并添加到类路径。

public class Dom4jTest {

	/**
	 * dom4j获取document对象
	 * 
	 * @param args
	 * @throws DocumentException
	 */
	public static void main(String[] args) throws DocumentException {
		// 要创建一个document对象,需要我们先创建一个SaxReader对象
		SAXReader reader = new SAXReader();
		// reader对象用于读取xml文件,然后返回一个document
		Document document = reader.read("src/books.xml");

	}
}

3.3 获取所有标签中的内容

1.通过创建SaxReader对象,来读取xml文件,获取document对象。

2.通过document对象,拿到xml的根元素对象。

3.通过根元素对象,获取所有的book标签对象。

4.遍历每个book标签对象,然后获取book标签对象内的每一个元素,通过getText()方法来拿到起始标签和结束标签之间的文本内容。

package com.hckj.test;

import java.util.List;

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

public class Dom4jTest {

	/**
	 * dom4j获取document对象
	 * 
	 * 1.通过创建SaxReader对象,来读取xml文件,获取document对象。 2.通过document对象,拿到xml的根元素对象。
	 * 3.通过根元素对象,获取所有的book标签对象。
	 * 4.遍历每个book标签对象,然后获取book标签对象内的每一个元素,通过getText()方法来拿到起始标签和结束标签之间的文本内容。
	 */
	public static void main(String[] args) throws DocumentException {
		// 要创建一个document对象,需要我们先创建一个SaxReader对象
		SAXReader reader = new SAXReader();
		// reader对象用于读取xml文件,然后返回一个document
		Document document = reader.read("src/books.xml");
		// 通过document对象,拿到xml的根元素对象
		Element root = document.getRootElement();
		// root.asXML() 将当前元素对象转成String 对象
		// System.out.println(root.asXML());
		// 通过根元素对象,获取所有的book标签对象
		// root.elements(标签名) 它可以拿到当前元素下的指定的子元素的集合
		List<Element> books = root.elements("book");
		// 遍历每个book标签对象,然后获取book标签对象内的每一个元素
		for (Element book : books) {
			// // 拿到books下面的元素对象
			// System.out.println(book.asXML());
			// attributeValue 获取已知属性名
			String id = book.attributeValue("id");
			Element nameElement = book.element("name");
			Element authorElement = book.element("author");
			Element priceElement = book.element("price");
			// // 通过getText()方法来拿到起始标签和结束标签之间的文本内容
			System.out.println("id:" + id + "\t书名:" + nameElement.getText() + "\t作者:" + authorElement.getText()
					+ "\t单价:" + priceElement.getText());
		}

	}
}

4.JSOUP

1.导入jar包

2.获取document对象

3.获取对应的标签Element对象

4.获取数据

	public static void main(String[] args) throws Exception {
		// 获取student.xml的path
		// 原来是路径名中出现了空格,在编译的时候,编译器会将空格编译成%20,从而在Jsoup.parse(new
		// File(path))的方法中,无法得到正确的路径,从而出现找不到不路径,或者空指针异常。
		// path中的getPath方法前加上toURI方法,从而将空格重新转换回来,
		String path = JsoupTest.class.getClassLoader().getResource("student.xml").toURI().getPath();
		// 解析xml文档,加载文档进内存,获取dom树
		// parse 解析xml或html文件
		Document document = Jsoup.parse(new File(path), "utf-8");
		// 获取元素对象
		// getElementById 根据id属性获取唯一的element对象
		// getElementsByTag 根据标签名称获取元素对象集合
		Elements elments = document.getElementsByTag("name");
		// 获取第一个name的element对象
		Element element = elments.get(0);
		String name = element.text();
		System.out.println(name);
	}

快速查询的方式

1.selector:选择器

​ select语法:参考selector类中定义的语法

2.Xpath:Xpath即xml路径语言,它是一种用来确定xml文档中某部分位置的语言

​ 使用jsoup的Xpath需要导入额外的包。

​ 查看w3cshool参考手册,使用xpath的语法来完成查询。

public class JsoupTest2 {

	public static void main(String[] args) throws Exception {
		String path = JsoupTest2.class.getClassLoader().getResource("student.xml").toURI().getPath();
		Document document = Jsoup.parse(new File(path), "utf-8");
		// 根据document对象创建 jxDocument
		JXDocument jxDocument = new JXDocument(document);

		// 查询所有的student标签
		// 全文搜索路径 : 全文搜索路径是以“//”开头, 在整个文档中查找符合规则的节点,不需要管目录的结构
		// List<JXNode> jxNodes = jxDocument.selN("//student");
		// for (JXNode node : jxNodes) {
		// System.out.println(node);
		// }

		// 查询所有student标签下的name标签
		// List<JXNode> selN = jxDocument.selN("//student/name");
		// for (JXNode node : selN) {
		// System.out.println(node);
		// }

		// 查询所有student标签下带有id属性的name标签
		// 如果需要查找的是属性值:那么必须以@开头
		// List<JXNode> selN = jxDocument.selN("//student/name[@id]");
		// for (JXNode node : selN) {
		// System.out.println(node);
		// }

		// 查询student标签下带有id属性的name标签,并且id属性为hckj
		List<JXNode> selN = jxDocument.selN("//student/name[@id='hckj']");
		for (JXNode node : selN) {
			System.out.println(node);
		}
	}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值