可扩展标记语言-----XML

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: XML(Extensible Markup Language):可扩展标记语言 可扩展:标签都是自定义的。

XML概述

概念

XML(Extensible Markup Language):可扩展标记语言 可扩展:标签都是自定义的。

发展历程

HTML和XML都是W3C(万维网联盟)制定的标准,最开始HTML的 语法过于松散,于是W3C制定了更严格的XML语法标准,希望能取 代HTML。但是程序员和浏览器厂商并不喜欢使用XML,于是现在 的XML更多的用于配置文件及传输数据等功能。

是谁造成的HTML语法松散?浏览器厂商。最开始W3C制定HTML的时候语法还是比较严格 的。但浏览器厂商为了抢占市场,语法错误也可以解析成功 HTML,最后“内卷”到HTML即使语法非常混乱也是可以被浏览 器解析。

2345_image_file_copy_16.jpg

tips:归根到底是语法的制定者和使用者不一致造成了HTML语 法混乱,JAVA语法严格就是因为java语言的运行工具java虚拟机 也是sun公司(现在是oracle)出品的,语法不通过不让运行。

XML的功能

1 配置文件:在今后的开发过程当中我们会频繁使用框架(框架: 半成品软件),使用框架时,需要写配置文件配置相关的参数,让框架满足我们的开发需求。而我们写的配置文件中就有一种文 件类型是XML。

日后编写大型项目,不可能从头到尾都是原创代码,很多功 能前人已经写好,我们只需要使用前人写好的半成品软件 (框架),再加入一些符合我们需求的配置即可完成开发。 比如我们组装一台电脑,不可能自己焊接电路板。而是先买 入一块主板,这块主板就是半成品软件。根据自己的需求加 入一些配置,比如要求流畅运行吃鸡,就需要配置i7处理 器、泰坦显卡。

2345_image_file_copy_17.jpg

2 传输数据:在网络中传输数据时并不能传输java对象,所以我们 需要将JAVA对象转成字符串传输,其中一种方式就是将对象转为 XML类型的字符串。

比如携程等旅游网站可以买火车票,但他们其实也是替 12306卖票,此时他们就需要拿到12306的票务数据。JAVA 对象不能在网络上传输,可以转为XML类型的字符串。

2345_image_file_copy_19.jpg

XML和HTML的区别

1 XML语法严格,HTML语法松散

2 XML标签自定义,HTML标签预定义

XML基本语法

2345_image_file_copy_20.jpg

1、文件后缀名是.xml

2、第一行必须是文档声明

3、有且仅有一个根标签

4、标签必须正确关闭

5、标签名区分大小写

6、属性值必须用引号(单双都可)引起来

XML组成部分

2345_image_file_copy_21.jpg

文档声明

文档声明必须放在第一行,格式为:

<?xml 属性列表 ?>

属性列表: version:版本号(必须) encoding:编码方式

标签

XML中标签名是自定义的,标签名有以下要求:

1、包含数字、字母、其他字符

2、不能以数字和标点符号开头,可以以_开头

3、不能包含空格

指令(了解)

指令是结合css使用的,但现在XML一般不结合CSS,语法为:

<?xml-stylesheet type="text/css" href="a.css"?>

属性

属性值必须用引号(单双都可)引起来

文本

如果想原样展示文本,需要设置CDATA区,格式为:

<![CDATA[文本]]>

约束_DTD约束

2345_image_file_copy_22.jpg

虽然XML标签是自定义的。但是作为配置文件时,也需要遵循一定 的规则。就比如在主板上硬盘口只能插硬盘,不能插入其他硬件。 约束就是定义XML书写规则的文件,约束我们按照框架的要求编写 配置文件。

2345_image_file_copy_23.jpg

我们作为框架的使用者,不需要会写约束文件,只要能够在xml中 引入约束文档,简单的读懂约束文档即可。XML有两种约束文件类 型:DTD和Schema。

DTD是一种较简单的约束技术,引入方式如下:

本地引入:

<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">

网络引入:

<!DOCTYPE 根标签名 PUBLIC "dtd文件的位置" "dtd文件路径">

约束_Schema约束

2345_image_file_copy_24.jpg

Schema比DTD对XML的约束更加详细,引入方式如下:

1 写xml文档的根标签

2 引入xsi前缀:确定Schema文件的版本。

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

3 引入Schema文件

xsi:schemaLocation="Schema文件定义的命名空间
Schema文件的具体路径"

4 为Schema约束的标签声明前缀

xmlns:前缀="Schema文件定义的命名空间"

例如:

<students
      xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
      xsi:schemaLocation="http://www.itbaizhan.cn/xml student.xsd"
        xmlns="http://www.itbaizhan.cn/xml">

Jsoup解析器_XML解析思想

2345_image_file_copy_25.jpg

XML解析即读写XML文档中的数据。框架的开发者通过XML解析读 取框架使用者配置的参数信息,开发者也可以通过XML解析读取网 络传来的数据。XML有如下解析思想:

DOM

将标记语言文档一次性加载进内存,在内存中形成一颗dom树

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

缺点:占内存

2345_image_file_copy_26.jpg

SAX

逐行读取,基于事件驱动的。

优点:不占内存,一般用于手机APP开发中读取XML

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

2345_image_file_copy_27.jpg

Jsoup解析器_XML常见解析器

1、JAXP:SUN公司提供的解析器,支持DOM和SAX两种思想

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

3、Jsoup:Jsoup是一款Java的HTML解析器,支持DOM思想。可直接解析某个URL地址、HTML文本 内容。它提供了一套非常省力的API,可通过CSS以及类似于jQuery的操作方法来取出和操作数据

4、PULL:Android操作系统内置的解析器,支持SAX思想

Jsoup解析器_Jsoup快速入门

2345_image_file_copy_28.jpg

步骤:

1 导入jar包

2 加载XML文档进内存,获取DOM树对象Document

3 获取对应的标签Element对象

4 获取数据

public class Demo1 {
    // 获取XML中所有学生的姓名
    public static void main(String[] args) throws IOException {
        // 2.加载XML文档进内存。获取DOM树对象Document
        // 2.1 获取类加载器
        ClassLoader classLoader = Demo1.class.getClassLoader();
        // 2.2使用类加载器,找到XML文档的路径
        String path = classLoader.getResource("com/itbaizhan/xsd/student.xml").getPath();
        // 2.3加载XML文档进内存,并转成Document对象
        Document document = Jsoup.parse(new File(path), "utf-8");
        // 3.获取对应的标签Element对象
        Elements name = document.getElementsByTag("name");
        // 4.获取数据
        for (Element element : name) {
            String text = element.text();
            System.out.println(text);
       }
   }
}

Jsoup解析器_Jsoup

2345_image_file_copy_29.jpg

Jsoup:可以解析xml或html,形成dom树对象。

常用方法:

static Document parse(File in, String charsetName):解析本地文件

static Document parse(String html):解析html或xml字符串

static Document parse(URL url, int timeoutMillis):解析网页源文件

public class Demo2 {
    // Jsoup
    public static void main(String[] args) throws IOException {
        // 解析本地XML
        String path = Demo2.class.getClassLoader().getResource("com/itbaizhan/xsd/student.xml").getPath();
        Document document = Jsoup.parse(new File(path), "utf-8");
        System.out.println(document);
        System.out.println("------------------");
        // 解析字符串
        Document document1 = Jsoup.parse("<?xml version=\"1.0\" ?>\n" +
                "<students\n" +
                "   xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
                "   xsi:schemaLocation=\"http://www.itbaizhan.cn/xml student.xsd\"\n" +
                "   xmlns=\"http://www.itbaizhan.cn/xml\">\n" + "\n" +
                "   <student number=\"baizhan_0001\">\n" +
                "       <name>baizhan</name>\n" +
                "       <age>10</age>\n" +" <sex>male</sex>\n"+
                "   </student>\n" +
                "   <student number=\"baizhan_0002\">\n" +
                "       <name>sxt</name>\n"+
                "       <age>11</age>\n" +
                "       <sex>female</sex>\n" +
                "   </student>\n" +
                "</students>");
        System.out.println(document1);
        System.out.println("---------------------------------");
        // 解析网络资源
        Document document2 = Jsoup.parse(new URL("https://www.baidu.com"), 2000);
        System.out.println(document2);
   }
}

Jsoup解析器_Document

2345_image_file_copy_30.jpg

Document:xml的dom树对象

常用方法:

Element getElementById(String id):根据id获取元素

Elements getElementsByTag(String tagName):根据标签名获取元素

Elements getElementsByAttribute(String key):根据属性获取元素

Elements getElementsByAttributeValue(String key,String value):根据属性名=属性值获取元 素。

Elements select(Sting cssQuery):根据选择器选取元素。

public class Demo3 {
    // Document
 public static void main(String[] args) throws IOException {
        String path = Demo3.class.getClassLoader().getResource("com/itbaizhan/jsoup/student.xml").getPath();
        Document document = Jsoup.parse(new File(path), "utf-8");
        // 根据id获取元素
        Element baizhan_0001 = document.getElementById("baizhan_0001");
        System.out.println(baizhan_0001);
        System.out.println("----------------------");
        // 根据标签获取元素
        Elements age = document.getElementsByTag("age");
        for (Element element : age) {
            System.out.println(element);
       }
        System.out.println("----------------------");
        // 根据属性获取元素
        Elements english = document.getElementsByAttribute("english");
        for (Element element : english) {
            System.out.println(element);
       }
        System.out.println("----------------------");
        // 根据属性名=属性值获取元素
        Elements elementsByAttributeValue = 
        document.getElementsByAttributeValue("english", "bz");
        for (Element element : elementsByAttributeValue) {
            System.out.println(element);
       }
        System.out.println("----------------------");
        // 使用CSS选择器获取元素
        Elements select = document.select("#baizhan_0001");
        System.out.println(select);
        System.out.println("----------------------");
        Elements sex = document.select("sex");
        System.out.println(sex);
        System.out.println("----------------------");
        Elements select1 = document.select(".aa");
        System.out.println(select1);
   }
}

Jsoup解析器_Element

2345_image_file_copy_31.jpg

Element: 元素对象

常用方法:

String text():获取元素包含的纯文本。

String html():获取元素包含的带标签的文本。

String attr(String attributeKey):获取元素的属性值。

public class Demo4 {
    // Document
    public static void main(String[] args) throws IOException {
        String path = Demo4.class.getClassLoader().getResource("com/itbaizhan/jsoup/student.xml").getPath();
        Document document = Jsoup.parse(new File(path), "utf-8");
        // 使用CSS选择器获取元素
        Elements elements = document.select("#baizhan_0001");
        Element element = elements.get(0);
        System.out.println(element.text());
        System.out.println("-----------------------");
        System.out.println(element.html());
        System.out.println("-----------------------");
        System.out.println(element.attr("id"));
   }
}

Jsoup解析器_XPath解析

2345_image_file_copy_32.jpg

XPath即为XML路径语言,它是一种用来确定标记语言文档中某部 分位置的语言。

使用方法:

1 导入 Xpath 的jar包 、

2 获取 Document 对象

3 将 Document 对象转为 JXDocument 对象
4 JXDocument 调用 selN(String xpath) ,获取 List 对象。
5 遍历 List ,调用 JXNode 的 getElement() ,转为 Element 对象。
6 处理 Element 对象。
public class Demo5 {
    // Document
    public static void main(String[] args) throws IOException, XpathSyntaxErrorException 
  {
        String path = Demo5.class.getClassLoader().getResource("com/itbaizhan/jsoup/student.xml").getPath();
        // 1. 获取`Document`对象
        Document document = Jsoup.parse(new File(path), "utf-8");
        //2. 将`Document`对象转为`JXDocument`对象
        JXDocument jxDocument = newJXDocument(document);
        //3. `JXDocument`调用`selN(String xpath)`,获取`List<JXNode>`对象。
        //       List<JXNode> jxNodes = jxDocument.selN("//name");
        // 想拿到baizhan_0001的年龄
        List<JXNode> jxNodes = jxDocument.selN("//student[@id='baizhan_0001']/age");
        //4. 遍历`List<JXNode>`,调用`JXNode`的`getElement()`,转为`Element`对象。
        for (JXNode jxNode : jxNodes) {
            Element element = jxNode.getElement();
            //5. 处理`Element`对象。
            System.out.println(element);
       }
   }
}


目录
相关文章
|
XML JavaScript 安全
XML( 可扩展编辑语言 ) —— DOM解析
XML( 可扩展编辑语言 ) —— DOM解析
73 2
|
4月前
|
XML Ubuntu Linux
部署08---扩展-Win10配置WSL(Ubuntu)环境,WSL系统是什么意思,是Windows系统上的一个子系统, xml的一大特点是直链系统,直接链接你的CPU,硬盘和内存,如何用 WSL部署
部署08---扩展-Win10配置WSL(Ubuntu)环境,WSL系统是什么意思,是Windows系统上的一个子系统, xml的一大特点是直链系统,直接链接你的CPU,硬盘和内存,如何用 WSL部署
|
5月前
|
XML JSON druid
xml 可扩展标记语言
xml 可扩展标记语言
25 0
|
XML 存储 设计模式
XML(可扩展编辑语言) —— DTD
XML(可扩展编辑语言) —— DTD
57 2
|
XML 存储 数据格式
XML系列(一)之 标记语言
XML系列(一)之 标记语言
|
XML 存储 JSON
XML——可扩展标记语言
XML——可扩展标记语言 XML是被设计用来传输和存储数据(HTML是用来呈现数据的) XML和HTML类似,不同的是HTML中都是预定义标签,而XML中没有预定义标前,全都是自定义标签,用来表示一些数据。
|
XML Java 数据格式
深入理解Spring IOC之扩展篇(一)、自定义xml标签
深入理解Spring IOC之扩展篇(一)、自定义xml标签
101 0
|
XML 存储 JavaScript
Web阶段:第六章:XML可扩展标记语言
Web阶段:第六章:XML可扩展标记语言
119 0
Web阶段:第六章:XML可扩展标记语言
|
27天前
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
52 1
|
3月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)