【JavaWeb】XML详解优化(28)

引言

  • 理财投资真的很让人着魔,怪不得有人赌上倾家荡产;
  • 据开学还有28天;
  • 从阿尔斯通,到Bytedance,无法评价,可能只是立场不同;

知识点总结

在这里插入图片描述

概念

  • XML(Extensible Makeup Language)指可拓展的标志语言;
  • 用于传输和存储数据;

与HTML的区别

  • XML的标签是可自定义的,而HTML的是预定义的;
  • XML的语法严格,而HTML的语法松散;
  • XML用于存储数据,HTML用于展示数据;

语法

基本语法

  • XML的文件声明必须放在第一行;
<?xml version='1.0'?>
  • XML元素的属性必须加上(单/双)引号;
  • 有且只有一个根目录;
  • 标签必须正确关闭;
  • 标签区分大小写;

快速入门

<?xml version='1.0'?>
<users>
    <user id='1'>
        <name>zhangsan</name>
        <age>23</age>
        <gender>male</gender>
        <br/>
    </user>

    <user id='2'>
        <name>lisi</name>
        <age>24</age>
        <gender>female</gender>
    </user>
</users>

组成部分

一个XML文档分为以下几个部分:
1.文档声明

<?xml 属性 ?>
属性列表:
versin="";版本
encoding="";使用的字符集
standalone="yes/no";是否依赖其他文件

2.指令

<?... ?>
常用于文档声明或连接CSS文件;
<?xml-stylesheet type="text/css" href="T1.css" ?>

3.标签
标签是自定义的,但是格式要注意:

  • 名称可以包含字母、数字以及其他的字符 ;
  • 名称不能以数字或者标点符号开始 ;
  • 名称不能以字母 xml(或者 XML、Xml 等等)开始 ;
  • 名称不能包含空格 ;
    4.属性
    属性值必须加引号;
    5.文本CATA区
    先介绍一下XML的实体引用
    在XML中,“<“,”&“等字符是不能直接放在文档中的,会产生XML错误,所以要用实体引用代替;
    在这里插入图片描述
    但这样比较麻烦,我们可以把带有特殊字符的语句放在CDATA区中;原理是CADTA区中文本会被解析器忽略,可以原封不动的打印出来;
 <![CDATA[A > B]]>
 ============
 格式
 <![CDATA[数据]]>

约束

约束的概念

因为XML文档的自定义性太强,所以我们在使用时需要一个约束文档来对XML文档进行约束,从而保证数据的规范性与安全性;

约束的分类

1. DTD:一种简单的约束技术

<!DOCTYPE note [
<!--表名根目录为node,且必须含有to,from,等节点-->
  <!ELEMENT note (to,from,heading,body)>

  <!ELEMENT to      (#PCDATA)>
<!--     #PCDATA指该标签里只能包含文本,不能包含标签 -->
  <!ELEMENT from    (#PCDATA)>

  <!ELEMENT heading (#PCDATA)>

  <!ELEMENT body    (#PCDATA)>

]>


<note>

  <to>George</to>

  <from>John</from>

  <heading>Reminder</heading>

  <body>Don't forget the meeting!</body>

</note>

2. Schema:一种复杂的约束技术(正在逐步取代DTD);

  • XML Schema 可针对未来的需求进行扩展
  • XML Schema 更完善,功能更强大
  • XML Schema 基于 XML 编写
  • XML Schema 支持数据类型
  • XML Schema 支持命名空间

解析

操作XML文档,将其中数据读取到内存中;

解析方式

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

* 优点:操作方便,可以对文档进行CRUD的所有操作
* 缺点:占内存

2.SAX:逐行读取,基于事件驱动的。

* 优点:不占内存。
* 缺点:只能读取,不能增删改

常见的解析器

  1. JAXP:sun公司提供的解析器,支持dom和sax两种思想
  2. DOM4J:一款非常优秀的解析器
  3. Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
  4. PULL:Android操作系统内置的解析器,sax方式的。

Jsoup解析器

使用步骤

  1. 导入jar包;
  2. 获取Document对象;
  3. 获取对应的标签Element对象;
  4. 获取数据;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class D1 {
    public static void main(String[] args) {
        String path = D1.class.getClassLoader().getResource("T1.xml").getPath();
        //获取配置xml文件的路径
        Document parse = Jsoup.parse(new File(path),"utf-8");
        //获取Document对象
        Elements name = parse.getElementsByTag("name");
        //获取元素
        for (Element element : name) {
            System.out.println(element);
        }

    }

}

对象的使用

Jsoup对象

Jsoup:工具类,可以解析html或xml文档,返回Document对象;
方法

* parse:解析html或xml文档,返回Document
* parse​(File in, String charsetName):解析xml或html文件的。
* parse​(String html):解析xml或html字符串
* parse​(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的文档对象
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;

public class D1 {
    public static void main(String[] args) throws IOException {
        String path = D1.class.getClassLoader().getResource("T1.xml").getPath();
        //获取配置xml文件的路径
        Document parse = Jsoup.parse(new File(path),"utf-8");
        String str="<?xml version='1.0'?>\n" +
                "<?xml-stylesheet type=\"text/css\" href=\"T1.css\" ?>\n" +
                "<users>\n" +
                "    <user id='1'>\n" +
                "        <name>zhangsan</name>\n" +
                "        <age>23</age>\n" +
                "        <gender>male</gender>\n" +
                "        <br/>\n" +
                "    </user>\n" +
                "\n" +
                "    <user id='2'>\n" +
                "        <name>lisi</name>\n" +
                "        <age>24</age>\n" +
                "        <gender>female</gender>\n" +
                "    </user>\n" +
                "</users>";
        Document parse1 = Jsoup.parse(str);
        System.out.println(parse1);


    }

}

Document对象
Document:文档对象。代表内存中的dom树
返回值都是Elements(元素Element的集合对象)
=============
* 获取Element对象
* getElementById​(String id):根据id属性值获取唯一的element对象
* getElementsByTag​(String tagName):根据标签名称获取元素对象集合
* getElementsByAttribute​(String key):根据属性名称获取元素对象集合
* getElementsByAttributeValue​(String key, String value):根据对应的属性名和属性值获取元素对象集合

演示

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;

public class D2 {
    /**
     * Document对象方法
     *
     * @param args
     */
    public static void main(String[] args) throws IOException {
        String path = D2.class.getClassLoader().getResource("T1.xml").getPath();
        Document parse = Jsoup.parse(new File(path), "utf-8");
        Elements user = parse.getElementsByTag("user");
        for(Element element:user)
            System.out.println(element);
        Elements sex = parse.getElementsByAttributeValue("sex","male");
        for (Element element : sex) {
            System.out.println(element);
        }

    }
}

Element:元素对象
1. 获取子元素对象
* getElementById​(String id):根据id属性值获取唯一的element对象
* getElementsByTag​(String tagName):根据标签名称获取元素对象集合
* getElementsByAttribute​(String key):根据属性名称获取元素对象集合
* getElementsByAttributeValue​(String key, String value):根据对应的属性名和属性值获取元素对象集合
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高冷小伙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值