数据解析(XML、HTML)

数据解析(XML、HTML),第1张

数据解析(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

        文档声明必须时第一行

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文件,本身也受到其他约束文件的要求,所以编写的更加谨慎

 需求:利用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 elements()得到当前元素下的所有元素List 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 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)

  •  其余安装步骤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);
		
		
	}

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5684113.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存