每一年都奔走在自己热爱里

没有人是一座孤岛,总有谁爱着你

XML简单学习

1.概念
  • 可扩展标记语言(Extensible Markup Language)

  • 可扩展:标签都是自定义的

  • 功能

    • 存储数据
      • 配置文件
      • 在网络中传输
  • xml与html的区别

    • xml标签都是自定义的,html标签都是预定义的
    • xml语法严格,html语法松散
    • xml是存放数据的,html是展示数据的
  • xml语法

    • xml后缀名为.xml
    • xml第一行有且必须为文档声明
    • xml文档中有且只有一个根标签
    • xml属性值必须被引号包含
    • 标签必须被正确关闭(要么自闭和,要么包含开始结束标签)
    • xml标签名称区分大小写
  • xml组成部分

    • 文档声明

      • 格式:

        <?xml version="1.0" 属性列表 ?>
        
      • version:版本号,必须的属性

      • encoding:编码方式,告知解析引擎的解码方式,默认:ISO-8859-1

      • standalone:是否独立,是否依赖于其他文件(yes,no)

    • 指令(结合css):

      <?xml-stylesheet type='text/css' href='a.css'?>
      
    • 标签:

      • 标签名称自定义,可以包含字母、数字、下划线,不能以数字、xml开头,不能包含空格
    • 属性:

      • id属性值唯一
    • 文本:

      • CDATA区中的文本会被原样展示

        <![CDATA][需要写的文本]>
        
  • 说明文档:规定xml文档的书写规则

    • 约束:规定xml文档的书写规则
    • 谁编写xml?--用户,软件的使用者(程序员)
      • 谁解析xml?--软件--->半成品软件(框架)
  • 分类:

    • DTD:一种简单的约束技术 .dtd
      • 引入DTD文档到xml文档中
        • 内部DTD:将约束规则定义在xml文档中
        • 外部DTD:将约束文档定义在外部文档中
          • 本地:<!DOCTYPE 根标签名 SYSTEM "DTD文档的位置">
          • 网络:<!DOCTYPE 根标签名 PUBLIC "DTD文档的名字" "DTD文档的位置URL">
    • Schema:一种复杂的约束技术 .xsd
  • 解析:

    • 操作xml文档,将文档的数据读取到内存中
      • 解析:将文档中的数据读取到内存中
      • 写入:将内存中的数据保存到xml文档中,持久化存储
    • 解析xml的方式:
      • DOM:将标记语言文档一次性加载到内存,将其转化为一棵DOM内存树
        • 优点:操作方便,可以对文档解析增删改查的操作
        • 缺点:消耗内存
      • SAX:逐行读取,基于事件驱动
        • 读一行释放一行,内存消耗小
        • 只能读取
  • 解析器:

    • xml常见的解析器:

      • JAXP:sun公司提供的解析器,支持dom和sax两种思想
      • DOM4J:一款非常优秀的解析器
      • Jsoup:jsoup一款java的HTML解析器
      • PULL:Android操作系统内置的解析器,sax方式的
    • Jsoup

      public class JsoupDemo01 {
          public static void main(String[] args) throws IOException {
              //获取Docunment对象,根据xml文档获取,获取xml的path
              String path = JsoupDemo01.class.getResource("xmlstudy.xml").getPath();
              //解析xml文档,加载文档进内存,获取DOM树
              Document parse = Jsoup.parse(new File(path), "utf-8");
              //获取Element元素对象
              Elements elements = parse.getElementsByTag("name");
              for (Element element : elements) {
                  System.out.println(element);
              }
          }
      }
      
      • Jsoup:工具类,可以解析html或xml文档,返回Document
        • parse:解析html或xml,返回Document
          • parse(File in,String charsetName):解析文件
          • parse(String html):解析字符串
          • parse(URL url,int timeoutMillis):通过网络获取
      • Docunment:文档对象,代表内存中的DOM树
        • 主要用于获取Element对象
          • getElementsByTags(String tagName):根据标签名称
      • Element:元素对象,获取属性和值
        • 获取子Element元素对象,同Document
        • 获取属性值:String attr(String key)
        • 获取文本对象:String text(),获取纯文本内容,不包含标签
        • 获取标签体的所有内容(包括子标签的字符串内容):String html()
      • Node:节点对象
        • 所有Document和Element的父类
  • 快捷查询

    • selector:选择器

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

        Document document = Jsoup.parse(is, "utf-8","");
        System.out.println(document.select("#001>gender").text()); //获取id为001的标签下的子标签gender并输出其内容
        
    • XPath:xml路径语言

      • 需要导入额外的jar包
posted @ 2020-10-26 10:38  雨下整夜~  阅读(116)  评论(0)    收藏  举报