数据解析(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的语法规则:

        xml文件的后缀名为:.xml

        文档声明必须时第一行

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

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

encoding:本XML文件的编码

 XML的标签规则:

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

<student id="1">

             <name>张三</name>

</student>

 XML的其他组成

  • XML文件中可以定义注释信息:<!- 注释内容 -->
  • XML文件中可以存在以下特殊字

&lt;    <  小于

&gt;    >  大于

&amp;   &  和号

&apos;  '  单引号

&quot;  "  引号

什么是文档约束

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

文档约束的分类

        DTD

        schema

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

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

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

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

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

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

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

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

 需求:利用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)树我们就可以对树中的内容进行任意的访问和修改
    • 缺点:如果文档中的内容过多或层次过多,则生成出来的树也就越大,内存占用率也就越高
    • 优点:任意访问和修改(可增删)

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

DOM常见的解析工具

 使用Dom4J解析出XML文件

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

分析:

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

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

  •  将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<Element> elements()得到当前元素下的所有元素
List<Element> elements(String name)得到当前元素下指定名字的子元素返回集合
Element elements(String name)得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个
String getName()得到元素名字
String attributeValue(String name)通过属性名直接得到属性值
String elementText(子元素名)得到指定名称的子元素的文本
String getText()的到文本

代码演示:

在项目中创建一个xml文件

 解析编码:

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<Element> elements = root.elements();
		
		//遍历节点中的的元素
		for (Element element1 : elements) {
			//遍历每一个节点的元素
//			System.out.println(element.asXML());
		
			//获取当前接节点的属性列表  	输出:   id:1		id:2	id:3
			List<Attribute> att = element1.attributes();
//			for (Attribute attbu : att) {
//				System.out.println(attbu.getName() + ":" + attbu.getValue());
//			}
			
			//获取指定属性值
			System.out.println("id"+":" + element1.attributeValue("id"));
			
			//获取所有子元素
			List<Element> 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

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

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

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

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值