• JavaWeb


    1.XML介绍

      1.概念:Extensible Markup Language 可扩展标记语言

        *可扩展:标签都是自定义的。<user> <student>

      2.功能:

        *存储数据

          1.配置文件

          2.在网络中传输

      3.与html的区别

        1.xml标签都是自定义的,html标签时预定义的

        2.xml的语法严格

        3.xml是存储数据的,html是展示数据的

       *W3C:万维网联盟

     

    2.语法快速入门

      *基本语法:

        1. xml文档的后缀名 .xml

        2. xml第一行必须定义为文档声明!!

        3. xml文档中有且仅有一个根标签

        4. 属性值必须使用引号 单双引号都行

        5. 标签必须正确关闭

        6. xml标签名称区分大小写

      *组成部分:

        1.文档声明

          1.格式 <?xml 属性列表 ?>

          2.属性列表:

            *version:版本号,必须的属性

            *encoding:编码方式。告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1

            *standalong:是否独立  取值:yes或者no  是否依赖其他文件

        2.指令(了解):结合css的

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

        3.标签:标签名称自定义

          规则:

            1.数字、标点符号不能开头

            2.名称不能以xml开头

            3.名称不能包含空格

        4.属性:id属性值唯一

        5.文本:

          * CDATA区:在该区域中的数据会被原样展示

            * 格式:<!【CDATA】【数据】>

      3.约束:规定xml文档的书写规则

        * 作为框架的使用者(程序员):

          1.能够在xml中引入约束文档

          2.能够简单的读懂约束文档

        *分类:  

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

          2.Schema:一种复杂的约束技术 后缀名xsd

        *DTD:

          * 引入DTD文档到xml文档中

            *内部dtd:将约束规则定义在xml文档中

            *外部dtd:将约束的规则定义在外部的dtd文件中

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

              *网络的:<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">

        *Schema:

          <!--
            1.填写xml文档的根元素
            2.引入xsi前缀. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            3.引入xsd文件命名空间. xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
            4.为每一个xsd约束声明一个前缀,作为标识 xmlns="http://www.itcast.cn/xml" 此为默认情况
                                xmlns:a="http://www.itcast.cn/xml" 这样表示a为其缩略名
          -->
         <students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns="http://www.itcast.cn/xml"
              xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
         >

    3.解析XML文档

      1.操作xml文档,将文档中的数据读取到内存中

        1.解析(读取):将文档中的数据读取到内存中

        2.写入:将内存中的数据保存到xml文档中。持久化存储

      2.解析xml的方式:

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

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

          *缺点:占内存

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

          *优点:不占内存

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

      3.XML常见的解析器

        1.JAXP :sun公司提供的解析器,支持dom和sax两种思想

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

        3.Jsoup :java的html解析器

        4.PULL :Android操作系统内置的解析器,sax方式

     

      4.Jsoup

        *快速入门:

          *步骤:

            1.导入jar包

            2.获取Document对象

            3.获取对应的标签Element对象

            4.获取数据

    package XML_Document.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;
    
    public class Jsoup_Demo01 {
        public static void main(String[] args) throws IOException {
            //获取document对象,根据xml获得
            //2.1通过类加载器获取myxml的path
            String path = Jsoup_Demo01.class.getClassLoader().getResource("XML_Document/myxml.xml").getPath();
            //2.2 解析xml文档 加载文档进内存,获取dom数 - -  > Document
            Document document = Jsoup.parse(new File(path), "utf-8");
    
            //3.获取元素对象
            Elements elements = document.getElementsByTag("name");
    
            //4.获取第一个name的element对象
            Element element = elements.get(0);
            //获取数据
            System.out.println(element.text());
        }
    }
    快速入门

      5.对象的使用

        1. Jsoup :工具类,可以去解析html或xml文档,返回document对象

          * parse :解析html和xml文档,返回Document

            * parse(File in , String CharsetName): 解析html和xml文件的

            * parse(String html):解析字符串

            * parse(URL url , int TimeoutMillis):通过网络路径获取指定的html或xml的文档对象  以后可以用于爬虫爬取html

        2. Document :文档对象,代表内存中的dom树

          *获取Element对象

            *getElementById(String id):根据id属性值获取唯一的Element对象

            *getElementsByTag(String tagName):根据标签名称获取元素对象集合

            *getElementsByAttribute(String key):根据属性名称获取元素对象集合

            *getElementsByAttributeValue(String key,String value):根据对应的属性名和属性值获取元素对象集合

        3. Elements :元素Element对象的集合。可以把它当做一个Arraylist<Element>来使用

        4. Element :元素对象

          1.获取子元素对象

          2.获取属性值

            * String attr(String key):根据属性名称获取属性值

          3.获取文本内容

            * String text():获取所有子标签的纯文本内容

            *String html():获取标签体的所有内容(包括子标签的标签和文本字符串内容)

        5. Node : 节点对象

          *是Document和Element的父类

    package XML_Document.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;
    
    public class Jsoup_Demo02 {
        public static void main(String[] args) throws IOException {
            String path = Jsoup_Demo01.class.getClassLoader().getResource("XML_Document/myxml.xml").getPath();
            Document document = Jsoup.parse(new File(path), "utf-8");
    
            //这是通过document来获取name标签,可以获取到两个
            Elements elements = document.getElementsByTag("name");
            System.out.println(elements);
    
            //先获取第一个student元素,然后通过element对象获取其子标签name,此时获取到1个
            Element element_student01 = document.getElementsByTag("student").get(0);
            Elements name = element_student01.getElementsByTag("name");
            System.out.println(name);
            System.out.println(name.text());
    
            //获取student对象的属性值
            String number = element_student01.attr("number");
            System.out.println(number);
        }
    }
    Element使用

     4.快捷查询方式

      1.selector:选择器

        *使用的方法:Elements select(String cssQuery)

          语法:参考Selector类中定义的语法

    package XML_Document.Jsoup;
    
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.select.Elements;
    
    import java.io.File;
    import java.io.IOException;
    
    public class Jsoup_Demo03 {
        public static void main(String[] args) throws IOException {
            String path = Jsoup_Demo01.class.getClassLoader().getResource("XML_Document/myxml.xml").getPath();
            Document document = Jsoup.parse(new File(path), "utf-8");
    
            //根据选择器来查找
    
            //1.查找所有name标签
            Elements name = document.select("name");
    
            //2.查找id值为3
            Elements tag = document.select("#s002");
    //        System.out.println(tag);
    
            //获取student标签里number为s002的age子标签
            Elements elements_student = document.select("student[number="s002"]");
            System.out.println(elements_student);
            Elements elements_student_age = document.select("student[number="s002"] > age");
            System.out.println("==============");
            System.out.println(elements_student_age);
        }
    }
    选择器使用

      2.XPath:XPath既为XML路径语言

        * 使用Jsoup的XPath需要额外导入jar包,且要查询W3Cschool参考手册,来完成查询

    package XML_Document.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.select.Elements;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.List;
    
    public class Jsoup_Demo04 {
        public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
            String path = Jsoup_Demo01.class.getClassLoader().getResource("XML_Document/myxml.xml").getPath();
            Document document = Jsoup.parse(new File(path), "utf-8");
    
            //根据document对象,创建JXDocument对象(因为他支持java语法)
            JXDocument jxDocument = new JXDocument(document);
    
            //4.结合XPath语法查询
            //查询所有的student标签
            List<JXNode> jxNodes = jxDocument.selN("//student");
            for (JXNode jxNode : jxNodes) {
                System.out.println(jxNode);
            }
    
            System.out.println("==========");
            //查询所有student标签下的name标签
            List<JXNode> jxNodes1 = jxDocument.selN("//student/name");
            for (JXNode jxNode : jxNodes1) {
                System.out.println(jxNode);
            }
    
            //查询student标签下带有id属性的name标签
            List<JXNode> jxNodes2 = jxDocument.selN("//student/name[@id]");
            for (JXNode jxNode : jxNodes2) {
                System.out.println(jxNode);
            }
    
            //查询student标签下带有id属性的name标签 并且id属性值为itcast
            List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id='001']");
            for (JXNode jxNode : jxNodes3) {
                System.out.println(jxNode);
            }
        }
    }
    XPath基本使用
  • 相关阅读:
    Content-Type 之 application/json 与 text/javascript
    利用 filter 机制 给 静态资源 url 加上时间戳,来防止js和css文件的缓存,利于开发调试
    Tomcat 启动报错:No default web.xml
    $.parseJson 在 firefox 下返回 null 的问题
    利用 spring bean 的属性 init-method 解决因为数据库连接没有初始化而导致首次点击页面超慢的问题
    spring项目的 context root 修改之后,导致 WebApplicationContext 初始化两次的解决方法
    proxool 连接池警告分析:appears to have started a thread named [HouseKeeper] but has failed to stop it
    Log4j 输出的日志中时间比系统时间少了8小时的解决方法,log4j日志文件重复输出
    itext 实现pdf打印数字上标和下标
    log4j 实现只输入我们指定包的日志
  • 原文地址:https://www.cnblogs.com/caixiaowu/p/13253947.html
Copyright © 2020-2023  润新知