数据解析(XML、HTML)

目录

XML的特点和使用场景

XML文件的创建

XML的语法规则:

 XML的标签规则:

 XML的其他组成

什么是文档约束

XML        VS        HTML

什么是XML解析

两种解析方式

DOM常见的解析工具

 使用Dom4J解析出XML文件

JSOUP解析


XML的特点和使用场景

  • 一是纯文本,默认使用UTF-8编码;二时可嵌套的;
  • 如果把XML内容存为文件,那么它就是一个XML文件
  • XML的使用场景:XML内容经常被当成消息进行网络传输,或者作为配置文件用于存储系统的信息。

XML文件的创建

        就是创建一个XML类型的文件,要求文件的后缀必须使用xml,如hello_world.xml

数据解析(XML、HTML)_第1张图片

XML的语法规则:

        xml文件的后缀名为:.xml

        文档声明必须时第一行

version:XML默认的版本号码、该属性是必须存在的

encoding:本XML文件的编码

 XML的标签规则:

  • 标签由一对尖括号和合法标识组成:,必须存在一个根标签,有且只有一个
  • 标签必须成对存在,又开始,有结束
  • 特殊标签可以不成对,但是必须有结束标记
  • 标签中可以定义属性,属性和标签名空格隔开,属性值必须使用引号:
  • 标签需要正确的嵌套

             张三

 XML的其他组成

  • XML文件中可以定义注释信息:
  • XML文件中可以存在以下特殊字

<    <  小于

>    >  大于

&   &  和号

'  '  单引号

"  "  引号

什么是文档约束

        文档约束:是用来限定xml文件中的标签以及属性一个怎么写。

文档约束的分类

        DTD

        schema

XML文档约束-DTD的使用(了解)

需求:利用DTD文档约束,约束一个XML文件的编写

分析:
        1.编写DTD约束文档,后缀必须是.dtd

        2.在需要编写的XML文件中导入该DTD约束文档

        3.按照约束的规定编写XML文件的内容

XML文档约束-schema的使用(了解)

        1.schema可以约束具体的数据类型,约束能力上更强大。

        2.schema本身也是一个xml文件,本身也受到其他约束文件的要求,所以编写的更加谨慎

数据解析(XML、HTML)_第2张图片

 需求:利用schema文件约束,约束一个XML文件的编写

分析:
        1.编写schema约束文档,后缀必须是.xsd,具体的形式到代码中观看

        2.在需要编写的XML文件中导入该schema约束文档

        3.按照约束内容编写XML文件的标签

XML        VS        HTML

        都是w3c这个组织下的两个产品, 最主要的功能就是储存和数据传输

        HTML  现广泛用于web方面

                    标签固定的且有语义(标签名称不能自定义)

                    语法不严格(不写头标签也没有影响)

        XML  现广泛用于数据配置方面

                  标签完全自定义(与HTTP不同)

                   语法非常严格

什么是XML解析

        使用程序读取XML中的数据

两种解析方式

        DOM解析

        SAX解析

  • DOM解析

    • 解析XML时 生成一个DOM(document)树我们就可以对树中的内容进行任意的访问和修改
    • 缺点:如果文档中的内容过多或层次过多,则生成出来的树也就越大,内存占用率也就越高
    • 优点:任意访问和修改(可增删)

数据解析(XML、HTML)_第3张图片

  • SAX解析
    • 针对于DOM解析而言是一种更快速、更高效的解析方式,主要用树遍历算法来进行节点访问。需要到哪里,只需要遍历该路径上的节点即可。
    • 缺点:并不知道生成树的全貌, 所有不能增删(边读边解析、不能确定下面还有没有元素)
    • 优点:更快速、更高效、省内存

DOM常见的解析工具

数据解析(XML、HTML)_第4张图片

 使用Dom4J解析出XML文件

需求:使用Dom4J把一个XMl文件的数据进行解析

分析:

  • 下载Dom4J框架,官网下载(dom4j),下载.jar文件

数据解析(XML、HTML)_第5张图片

  •  在项目中创建一个文件加:lib 

数据解析(XML、HTML)_第6张图片

  •  将dom4j-2.1.1.jar文件复制到lib文件中
  • 在jar文件上点击右键,选择Build Path -> 点击 Add path...
  • 在类中导包使用

Dom4J解析XML-得到Document对象

SAXReader类

构造方法 说明
public SAXReader() 创建Dom4J的解析器对象
Document read(String url) 加载XML文件成为Document 对象

Document类

方法名 说明
Element getRootElement() 获得根元素对象

Dom4J中的常用方法

方法名 说明
List elements() 得到当前元素下的所有元素
List elements(String name) 得到当前元素下指定名字的子元素返回集合
Element elements(String name) 得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个
String getName() 得到元素名字
String attributeValue(String name) 通过属性名直接得到属性值
String elementText(子元素名) 得到指定名称的子元素的文本
String getText() 的到文本

代码演示:

在项目中创建一个xml文件

数据解析(XML、HTML)_第7张图片

 解析编码:

import java.io.File;
import java.util.List;

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

public class Dom4JDemo {

	public static void main(String[] args) throws DocumentException {
		//创建DOM4J解析器对象
		SAXReader reader = new SAXReader();
		
		//向解释器对象传入一个需要被解析的xml文件
		//document就是xml文件的对象
		Document document  = reader.read(new File("users.xml"));
		
		//获取xml文件中的根节点元素
		Element root = document.getRootElement();	//此处根节点root=users
		
		//获取root元素下的所有
		List elements = root.elements();
		
		//遍历节点中的的元素
		for (Element element1 : elements) {
			//遍历每一个节点的元素
//			System.out.println(element.asXML());
		
			//获取当前接节点的属性列表  	输出:   id:1		id:2	id:3
			List att = element1.attributes();
//			for (Attribute attbu : att) {
//				System.out.println(attbu.getName() + ":" + attbu.getValue());
//			}
			
			//获取指定属性值
			System.out.println("id"+":" + element1.attributeValue("id"));
			
			//获取所有子元素
			List ele = element1.elements();
			for (Element elet : ele) {
				System.out.println(elet.getName() + ":" + elet.getText());
			}
			System.out.println("==========");
			
			//获取指定元素
			System.out.println("name" + ":" + element1.element("name").getText());
		}
	}

}

        运行结果比较多,这里就不展示了,感兴趣的朋友可以自己运行以下。

JSOUP解析

        jsoup解析的特点:
                不仅可以解析xml,也可以解析html

                按照名称来获取我们的元素

  • 下载JSOUP框架,下载地址(jsoup: Java HTML parser, built for HTML editing, cleaning, scraping, and XSS safety)

数据解析(XML、HTML)_第8张图片

  •  其余安装步骤xDmo4J一样
  • 将其放入项目的lib文件中

数据解析(XML、HTML)_第9张图片

 使用JSOUP解析:

直接上代码:
 

import java.io.File;
import java.io.IOException;

import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.jsoup.Jsoup;

public class JSOUPTest {

	public static void main(String[] args) throws IOException {
		//1.获取xml文件的document对象      
		//注意:此处Document类导入的是org.jsoup.nodes.Document,不敢导入Dom4J包下的
		Document document = Jsoup.parse(new File("users.xml"), "utf-8");
		
		//获取单一一个标签元素对象,只能通过id属性来获取在xml/html中,每一个标签都可以定义id属性但是值不能一样
//		Element elementById = document.getElementById("1");
//		//将id为“1”的标签的所有内容都打印出来了,(包括子标签的内容)
//		System.out.println(elementById);
		
		//获取所有名称为user的标签对象  elementsByTag本质上是一个列表
		Elements elementsByTag = document.getElementsByTag("user");	
		//打印user的标签标签下的所有元素,两种获取方式
		//1.将elementsByTag看成一个列表遍历输出
//		for (Element element : elementsByTag) {
//			System.out.println(element);
//		}
		//2.直接输出
		System.out.println(elementsByTag);
		
		
	}

}

你可能感兴趣的:(高级,xml,html)