ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

XML

2021-05-20 23:30:06  阅读:117  来源: 互联网

标签:XML xml String 标签 获取 文档 import


XML

XML简介

1. 概念:Extensible Markup Language  可扩展标记语言
	可扩展:标签是自定义的。如:`<user>`
	可以被大多数浏览器解析
2. 功能:
	* 存储数据:
		1. 配置文件
		2. 在网络中传输数据
3. XML与HTML区别
	1. XML标签都是自定义的,HTML标签都是预定义的。
	2. XML语法严格,HTML语法松散。
	3. XML是存储数据的,HTML是展示数据的。

语法

* 基本语法:
	1.后缀名.xml
	2.xml的第一行必须为文档声明
	3.xml文档中有且仅有一个标签
	4.属性值必须用引号引起来(单双都可以)
	5.标签必须正确关闭(自结束或结束标签)
	6.xml标签区分大小写
* 快速入门:
		<?xml version = '1.0' ?>
		<users>
			<user id = '1'>
				<name>zhouyingchuan</name>
				<age>21</age>
			</user>
		</users>
* 组成部分:
	1.文档声明
		1.格式:`<?xml 属性列表 ?>`
		2.属性列表:
			* version:版本号,必须的属性一般设置为1.0
			* encoding:编码方式,告诉浏览器解析引擎当前使用的字符集
			* standalone:是否独立(yes,no)
	2.指令:结合css修饰xml
		和html类似`<?xml-stylesheet type="text/css" href="" ?>`
	3.标签:标签名称自定义
		规则:
			1.名称可以包含字母、数字、下划线、其他字符
			2.名称不能以数字或者字符开头
			3.名称不能以字母xml(Xml,XML等)开始
			4.名称不能包含空格
	4.属性
		id值通常唯一
	5.文本
		CDATA区:在该数据区的数据将会被原样显示
		格式:`<![CDATA[数据]]`
* 约束:规定xml文档的书写规则
	* 作为框架使用者(程序员)
		1.能够在xml中引入约束文档
		2.能够简单的读懂约束文档
	* 分类:
		1.DTD:一种简单的约束技术
		2.Schema:一种复杂的约束技术


​ * DTD:
​ * 引入DTD文档到xml文档中
​ * 内部DTD:将约束规则定义在xml文档中
​ * 外部DTD:将约束定义在外部的DTD文件中
​ 1.本地:<!DOCTYPE students(跟标签) SYSTEM "student.dtd"(DTD文件的位置)>
​ 2.网络: <!DOCTYPE students(跟标签) PUBLIC "DTD文件名字" "student.dtd"(DTD文件的位置URL)>
​ * Schema:
​ * 引入:
​ 1.填写xml文档的根标签
​ 2.引入xsi前缀.xmlns:xsi=“http://www.w3.org/2001/XNLSchema- instance”
​ 3.引入xsd文件命名空间. xsi:schemaLocation=“http://www.itcast.cn/xml
student.xsd”
​ 4.为每一个xsd约束声明一个前缀,作为标识xmlns=“http: / /www.itcast.cn/xml”

解析

定义:操作xml文档,将文档中的数据读取到内存中
	* 操作xml文档
		1.解析(读取):将文档中的数据读取到内存中
		2.写入:将内存中的数据保存到xml文档中。持久化储存 
	* 解析方式:
		1. DOM:将标记语言文档一次性加载进内存,在内存中行成DOM树
			优点:操作方便,可以对文档进行CURD的操作
			缺点:比较占内存
		2. SAX:逐行读取,基于事件驱动
			优点:不占内存
			缺点:只能读取,不能CURD
	* xml常见的解析器:
		1. JAXP:支持DOM和SAX两种思想
		2. DOM4J:支持DOM思想
		3. Jsoup:Java解析HTML的解析器,也可以解析XML
		4. PULL:安卓内置的解析器,支持SAX思想
	* Jsoup解析器
		*快速入门:
			* 步骤:
				1.导入jar包 jsoup.jar
				2.获取Document对象
				3.获取对应的标签Element对象

JsoupDemo1

package Xml.jsoup;

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

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

/**
 * Jsoup快速入门
 */
public class JsoupDemo1 {
    public static void main(String[] args) throws IOException {
        //2.获取Document对象,根据xml文档获取
        //获取student.xml的path
        String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
        //解析xml文档,加载进内存,获取DOM树
        Document document = Jsoup.parse(new File(path),"utf-8");
        //获取元素对象 Element
        Elements elements = document.getElementsByTag("name");
        System.out.println(elements.size());

        //获取标签为name的第一个元素
        Element element = elements.get(0);
        //获取数据
        String name = element.text();
        System.out.println(name);
    }
}
	* 对象的使用:
		1.Jsoup:工具类,可以解析html文档和xml文档,返回Document对象
			* parse:解析html和xml文档,返回Document对象
			* parse(File in , String charsetName):解析html和xml文件的
			* parse(String html):解析html和xml字符串
			* parse(URL url, int timeoutMillis):通过网络路径获取指定的html和xml文档 
		2.Document:文档对象。代表内存中的DOM树
			* 获取Element对象
			* getElementById(String id):根据id获取元素
			* getElementByTag(String tagName):根据标签获取元素
			* getElementByAttribute(String key):根据属性名获取元素对象集合
			* getElementByAttributeValue(String key,String value):根据属性名和属性对应的值来获取对象集合
		3.Elements:元素Element对象的集合。可以当作ArrayList<Element>使用。
		4.Element:元素对象
			1.元素对象的子标签
				* getElementById(String id):根据id获取元素
				* getElementByTag(String tagName):根据标签获取元素
				* getElementByAttribute(String key):根据属性名获取元素对象集合
				* getElementByAttributeValue(String key,String value):根据属性名和属性对应的值来获取对象集合
			2.获取属性的值
				String attr(String key):根据属性名获取属性值
			3.获取文本内容
				String text():获取文本内容
				String html():获取标签的所有内容(包括子标签字符串内容)
		5.Node:对象
			* 是Document和Element的父类
	* 快捷查询方式:
		1. selector:选择器
			* 使用的方法:Elements select (String cssQuery(参考select类))
		2. XPath;XPath是XML路径语言,他是一种用来确定XML文档中某部分位置的语言
		使用:
			导入JsoupXPath的jar包,查看参考手册,使用XPath语法

JsoupXPath

package Xml.jsoup;

import cn.wanghaomiao.xpath.exception.XpathSyntaxErrorException;
import cn.wanghaomiao.xpath.model.JXDocument;
import cn.wanghaomiao.xpath.model.JXNode;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

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

/**
 * XPath查询
 */
public class JsoupXPath {
    public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
        //2.获取Document对象,根据xml文档获取
        //获取student.xml的path
        String path = JsoupXPath.class.getClassLoader().getResource("student.xml").getPath();
        //解析xml文档,加载进内存,获取DOM树
        Document document = Jsoup.parse(new File(path),"utf-8");
        //根据document对象构建JXDocument对象
        JXDocument jxDocument = new JXDocument(document);
        //结合XPath语法查询
        //查询所有的标签
        List<JXNode> jxNodes = jxDocument.selN("//student");
        for (JXNode jxNode : jxNodes) {
            System.out.println(jxNode);
        }
        //结合XPath语法查询
        //查询student下的name标签
        List<JXNode> jxNodes2 = jxDocument.selN("//student/name");
        for (JXNode jxNode : jxNodes2) {
            System.out.println(jxNode);
        }
        //结合XPath语法查询
        //查询student下的name标签带有id属性
        List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id]");
        for (JXNode jxNode : jxNodes3) {
            System.out.println(jxNode);
        }
        //结合XPath语法查询
        //查询student下的name标签带有id属性
        List<JXNode> jxNodes4 = jxDocument.selN("//student/name[@id='s001']");
        for (JXNode jxNode : jxNodes4) {
            System.out.println(jxNode);
        }
    }
}

标签:XML,xml,String,标签,获取,文档,import
来源: https://blog.csdn.net/qq_45925322/article/details/117093744

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有