XML的约束与XML/HTML的解析

XML:


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

  • 可扩展:标签都是自定义的。
  • 功能
    • 存储数据

      1. 配置文件
      2. 在网络中传输
  • xml与html的区别
    1. xml标签都是自定义的,html标签是预定义。
    2. xml的语法严格,html语法松散
    3. xml是存储数据的,html是展示数据
  • w3c:万维网联盟

语法:


  • 基本语法:

    1. xml文档的后缀名 .xml
    2. xml第一行必须定义为文档声明
    3. xml文档中有且仅有一个根标签
    4. 属性值必须使用引号(单双都可)引起来
    5. 标签必须正确关闭
    6. 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>
    
  • 组成部分:
    1. 文档声明

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

        • version:版本号,必须的属性
        • encoding:编码方式。告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1
        • standalone:是否独立
          • 取值:

            • yes:不依赖其他文件
            • no:依赖其他文件
    2. 指令(了解):结合css的,展示数据
      
      <?xml-stylesheet type="text/css" href="a.css" ?>
    3. 标签:标签名称自定义的
      • 规则:

        • 名称可以包含字母、数字以及其他的字符
        • 名称不能以数字或者标点符号开始
        • 名称不能以字母 xml(或者 XML、Xml 等等)开始
        • 名称不能包含空格
    4. 属性:
      id属性值唯一
    5. 文本:
      • CDATA区:在该区域中的数据会被原样展示,可以不用特殊字符如‘<‘需要用 &lt

        • 格式:
        
         <![CDATA[ 数据内容 ]]>
        

约束


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

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

      1. 能够在xml中引入约束文档
      2. 能够简单的读懂约束文档
    • 分类:
      1. DTD:一种简单的约束技术,有缺陷,属性限定不全面
      2. Schema:一种复杂的约束技术
    • DTD:
      • 引入dtd文档到xml文档中

        • 内部dtd:将约束规则定义在xml文档中
        • 外部dtd:将约束的规则定义在外部的dtd文件中
          • 本地:
          
          <!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
          
          • 网络:
          
          <!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
          
          
          dtd文件内容
          <!ELEMENT students (student*) >
          <!ELEMENT student (name,age,sex)>
          <!ELEMENT name (#PCDATA)>
          <!ELEMENT age (#PCDATA)>
          <!ELEMENT sex (#PCDATA)>
          <!ATTLIST student number ID #REQUIRED>
          
          XML引入内部dtd
          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE students SYSTEM "student.dtd">
          
          <students>
              <student number="0001">
                  <name>tom</name>
                  <age>18</age>
                  <sex>male</sex>
              </student>
          
          </students>
          
    • Schema:
      • 引入:
        1.填写xml文档的根元素
        2.引入xsi前缀. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        3.引入xsd文件命名空间. xsi:schemaLocation="xxx/student.xsd"
        4.为每一个xsd约束声明一个前缀(用来区分多个xsd文档),作为标识 xmlns="xxx/xml"(xmlns:a="xxx/xml")

        
        <students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="xxx/xml"
        xsi:schemaLocation="xxx/tudent.xsd">
        

解析:操作xml文档,将文档中的数据读取到内存中


  • 操作xml文档

    1. 解析(读取):将文档中的数据读取到内存中
    2. 写入:将内存中的数据保存到xml文档中。持久化的存储
  • 解析xml的方式:
    1. DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树

      • 优点:操作方便,可以对文档进行CRUD的所有操作
      • 缺点:占内存
    2. SAX:逐行读取,基于事件驱动的。
      • 优点:不占内存。
      • 缺点:只能读取,不能增删改
  • xml常见的解析器:
    1. JAXP:sun公司提供的解析器,支持dom和sax两种思想
    2. DOM4J:一款非常优秀的解析器
    3. Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
    4. PULL:Android操作系统内置的解析器,sax方式的。
  • Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
    • 快速入门:

      • 步骤:

        1. 导入jar包
        2. 获取Document对象
        3. 获取对应的标签Element对象
        4. 获取数据
    • 代码:
    
         //2.1获取student.xml的path
        String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
        //2.2解析xml文档,加载文档进内存,获取dom树--->Document
        Document document = Jsoup.parse(new File(path), "utf-8");
        //3.获取元素对象 Element
        Elements elements = document.getElementsByTag("name");
    
        System.out.println(elements.size());
        //3.1获取第一个name的Element对象,elements继承ArrayList
        Element element = elements.get(0);
        //3.2获取数据
        String name = element.text();
        System.out.println(name);
    
  • 对象的使用:
    1. 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的文档对象
    2. Document:文档对象。代表内存中的dom树
      • 获取Element对象

        • getElementById?(String id):根据id属性值获取唯一的element对象
        • getElementsByTag?(String tagName):根据标签名称获取元素对象集合
        • getElementsByAttribute?(String key):根据属性名称获取元素对象集合 (id)
        • getElementsByAttributeValue?(String key, String value):根据对应的属性名和属性值获取元素对象集合
    3. Elements:元素Element对象的集合。可以当做 ArrayList来使用
    4. Element:元素对象
      1. 获取子元素对象

        • getElementById?(String id):根据id属性值获取唯一的element对象
        • getElementsByTag?(String tagName):根据标签名称获取元素对象集合
        • getElementsByAttribute?(String key):根据属性名称获取元素对象集合
        • getElementsByAttributeValue?(String key, String value):根据对应的属性名和属性值获取元素对象集合
      2. 获取属性值
        • String attr(String key):根据属性名称获取属性值
      3. 获取文本内容
        • String text():获取文本内容
        • String html():获取标签体的所有内容(包括字标签的字符串内容)
    5. Node:节点对象
      • 是Document和Element的父类
      
      import cn.wanghaomiao.xpath.exception.XpathSyntaxErrorException;
      import org.jsoup.Jsoup;
      import org.jsoup.nodes.Document;
      import org.jsoup.select.Elements;
      
      import java.io.IOException;
      import java.net.URL;
      
      public class JsoupDemo01 {
          public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
              String path= JsoupDemo01.class.getClassLoader().getResource("").getPath();
      
              URL url= new URL("https://www.baidu.com/");
              Document document = Jsoup.parse(url,10000);
              Elements tag = document.getElementsByTag("map");
              Elements btn = document.getElementsByAttributeValue("type","submit");
              String text = btn.attr("value");
              System.out.println(btn);
              System.out.println("-------------");
              System.out.println(text);
              System.out.println("-------------");
      
           }
      }
      
      
  • 快捷查询方式:
    1. selector:选择器

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

        • 语法:参考Selector类中定义的语法
    2. XPath:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言
      • 使用Jsoup的Xpath需要额外导入jar包。
      • 查询w3cshool参考手册,使用xpath的语法完成查询
      • 代码:
        
        //1.获取student.xml的path
        String path = JsoupDemo6.class.getClassLoader().getResource("student.xml").getPath();
        //2.获取Document对象
        Document document = Jsoup.parse(new File(path), "utf-8");
        
        //3.根据document对象,创建JXDocument对象
        JXDocument jxDocument = new JXDocument(document);
        
        //4.结合xpath语法查询
        //4.1查询所有student标签
        List<JXNode> jxNodes = jxDocument.selN("//student");
        for (JXNode jxNode : jxNodes) {
            System.out.println(jxNode);
        }
        
        System.out.println("--------------------");
        
        //4.2查询所有student标签下的name标签
        List<JXNode> jxNodes2 = jxDocument.selN("//student/name");
        for (JXNode jxNode : jxNodes2) {
            System.out.println(jxNode);
        }
        
        System.out.println("--------------------");
        
        //4.3查询student标签下带有id属性的name标签
        List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id]");
        for (JXNode jxNode : jxNodes3) {
            System.out.println(jxNode);
        }
        System.out.println("--------------------");
        //4.4查询student标签下带有id属性的name标签 并且id属性值为pp
        
        List<JXNode> jxNodes4 = jxDocument.selN("//student/name[@id='sex']");
        for (JXNode jxNode : jxNodes4) {
            System.out.println(jxNode);
        }
        

原文地址:https://www.cnblogs.com/huxiaobai/p/12129447.html

时间: 2024-10-11 12:19:09

XML的约束与XML/HTML的解析的相关文章

XML DTD约束 对xml文件的crud的查询Read Retrieve操作 xml递归遍历

本地的dtd文档 xml中引入dtd文档 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 书架 SYSTEM "book.dtd"> <书架> <书> <书名>Java就业培训教程</书名> <作者>张孝祥</作者> <售价>39.00</售价> </书> <书

CDATA约束(xml基础)

1.XML技术:与数据相关的技术,在企业中xml技术常用来存储数据和传输数据,流行的原因----xml与任何编程 语言无关,可用于php.java..net等任何语言. XML:可扩展标记语言 XML标记随意定义-----可扩展 XML典型存储和传输应用: 1).xml充当数据库,保存数据信息, 2).在AJAX中传输数据,WebService技术,网络中传输数据时,格式采用xml 在html中预定义了很多标记,每个标记都有相应的显示效果,xml所标记没有被预定义, 在xml中随便写个<name

xml介绍 约束 解析

今天内容 1.xml介绍 2.xml约束 3.xml解析 以上内容可以看懂,理解 4.贪吃蛇(补充)------------------------------------------------ 1.xml xml:可扩展的标记语言. xml作用:用于存储与传输数据. xml与html区别 ? XML 不是 HTML 的替代.-----xml对应xlst 相当于css于html ? XML 和 HTML 为不同的目的而设计: ? XML 被设计为传输和存储数据,其焦点是数据的内容. ? HTM

JAVA基础学习之XMLCDATA区、XML处理指令、XML约束概述、JavaBean、XML解析(8)

1.CDATA区在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理.遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出.语法:<![CDATA[ 内容 ]]> <![CDATA[ <book> <br/> </book> ]]> 2.处理指令处理指令,简称PI (processing instruction).处理指令用来指挥解析引擎如何解析XML文

Dom4J配合XPath解析schema约束的xml配置文件问题

如果一个xml文件没有引入约束,或者引入的是DTD约束时,那么使用dom4j和xpath是可以正常解析的,不引入约束的情况本文不再展示. 引入DTD约束的情况 mybook.dtd: <?xml version="1.0" encoding="UTF-8" ?> <!ELEMENT books (book+)> <!ELEMENT book (name|author|price)+> <!ELEMENT name (#PCD

Java xml 操作(Dom4J修改xml &#160;&#160;+ xPath技术 &#160;+ SAX解析 + XML约束)

1 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大小写.有且仅有一个根标签. 属性: 可有多个属性,但属性值必须用引号(单引号或双引号)包含,但不能省略,也不能单 双混用. 文档声明: <?xml version="1.0" encoding="utf-8"?> encoding="utf-8&q

XML - 十分钟了解XML结构以及DOM和SAX解析方式

引言 NOKIA 有句著名的广告语:"科技以人为本".不论什么技术都是为了满足人的生产生活须要而产生的.详细到小小的一个手机.里面蕴含的技术也是浩如烟海.是几千年来人类科技的结晶,单个人穷其一生也未必能掌握其一角.只是个人一直觉得主要的技术和思想是放之四海而皆准的,很多技术未必须要我们从头到尾再研究一遍.我们要做的就是站在巨人的肩膀上.利用其成果来为人们的需求服务. 随着移动互联网时代的大潮.越来越多的App不光是须要和网络server进行数据传输和交互,也须要和其它 App 进行数据

XML——XML文件约束之DTD详解

1.XML文件约束与DTD的简单介绍 我们编写文档来约束一个XML文档的书写规范,这称之为XML约束. 常用的约束技术有: XML DTD XML Schema DTD的基本概念: document type definition 文档类型定义 DTD文件一般和XML文件配合使用,主要是为了约束XML文件. XML文件引入DTD文件,这样XML可以自定义标签,但又受到DTD文件的约束.比如上一节使用XML描述一个班级的信息,如果我们给每一个学生定义一个<面积>标签,语法上也是没有错误的,但是不

XML(二)之DTD——XML文件约束

前面介绍了XML的作用和基本的格式,今天我给大家分享的是关于XML的约束.废话不多说,我们直接来正题! 一.DTD简介 1.1.DTD概述 DTD(Document Type Definition,文档类型定义) 1)DTD是一套关于标记符的语法规则.它是XML1.0版规格的一部分,是XML文件的验证机制,属于XML文件组成的一部分. 2)XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能够成为数据交换的标准,因为不同的公司只需定义好标准的DTD, 各公司都能够依照DTD建立XM