zoukankan      html  css  js  c++  java
  • XML

    XML

    1. 概念:

    • Extensible Markup Language,可扩展标记语言。可扩展的意思主要是指,在这种标记语言中,标签是可以自定义的,如定义一个people标签< people >,定义一个emp标签 < emp >

    2. 功能

    • 主要用于存储数据,替代properties格式的配置文件,便于在网络中传输等。

    3. xml与HTML的区别

    • xml的语法是严格的,HTML的语法是松散的
    • xml的标签都是自定义的,HTML的标签都是预定义的
    • xml主要使用来存储数据的,HTML主要是展示数据的

    4. 基本语法

    1. xml文档的后缀名为xml

    2. xml文档第一行必须是文档声明,如 < ?xml version='1.0' ? >

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

    4. 属性值必须使用引号引起来

    5. 标签必须正确关闭

    6. xml文档标签名大小写敏感的

      <?xml version="1.0"?>
      
      <users>
      	<user>
      		<name>aaa</name>
      		<age>12</age>
      		<gender>male</gender>
      
      	</user>
      	<user>
      		<name>bbb</name>
      		<age>12</age>
      		<gender>male</gender>
      
      	</user>
      	<user>
      		<name>ccc</name>
      		<age>12</age>
      		<gender>female</gender>
      
      	</user>
      </users>
      
      

      5.组成部分

      1. 文档声明:
        1. 格式:< ?xml 属性列表? >
        2. 属性列表:
          • version:版本号,这是必须的属性
          • encoding:编码方法
          • standalone:是否独立,取值为yes或者no,是否依赖其他文件
      2. 指令:用来结合css展示数据,现在一般不使用
      3. 标签:
        1. 名称可以包含字母、数字、其他字符
        2. 名称不可以以数字、标点符号开头
        3. 名称不可以xml开头
        4. 名称不能包含空格
      4. 属性:id值唯一
      5. 文本:
        1. CDATA区的数据会被原样展示:< ![CDATA[ 数据 ]] >

    6.xml的解析

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

    1. 解析xml的方法:

      1. DOM方法:将标记语言文档一次性加载进内存,在内存中形成一颗DOM树,一般用在服务器端
        • 优点:操作方便,可以对文档进行CRUD的所有操作
        • 缺点:DOM树加载进内存,更加占用内存
      2. SAX方法:逐行读取,逐行释放,基于事件驱动
        • 优点:每次读取一行,不占用内存,适合内存小的设备
        • 缺点:只能进行读取,不能增删改
    2. XML常见的解析器:

      1. JAXP:SUN公司提供的解析器,支持dom、sax两种方法
      2. DOM4J:一款优秀的解析器
      3. Jsoup:一款Java的HTML解析器,可以直接解析某个URL地址,HTML文本内容
      4. PULL:Android操作系统内置的解析器,sax方法的
    3. Jsoup

      使用步骤:

      1. 导入jar包

      2. 获取document对象

      3. 获取对应的标签,其实就是Element对象

        public class JsoupDemo01 {
            public static void main(String[] args) throws IOException {
                // 通过类加载器,获得xml文件的路径
                String path = JsoupDemo01.class.getClassLoader().getResource("users.xml").getPath();
                // 获取document对象,也就是DOM树加载进内存
                Document document= Jsoup.parse(new File(path), "utf-8");
                // 获取元素对象,返回的Elements是ArrayList的子类
                Elements elements = document.getElementsByTag("name");
                System.out.println(elements.size());
        
                Element element = elements.get(0);
                System.out.println(element.text());
        
            }
        }
        

    4.Jsoup的对象:

    1. Jsoup:工具类,可以解析HTML 或者xml文档,返回Document,主要是parse方法,有多个重载形式

      1. parse(File in, String charSetName):解析xml或者HTML文件的
      2. parse(String html):用来解析xml或者HTML字符串
      3. parse(URL url, int timeoutMillis):通过网络路径获取指定的HTML或者xml文档对象
      URL url = new URL("https://www.zhihu.com/question/27574436");
      Document document1 = Jsoup.parse(url, 10000);// 解析某个HTML
      System.out.println(document1);
      
    2. Document对象:文档对象,代表着内存中的dom树

      1. 获取element对象
        1. getElementsByTag(String name):根据标签名获取元素集合
        2. getElementsByAttribute(String key):根据属性名称获取元素对象集合
        3. getElementsByAttributeValue(String key, String value):根据对象的属性名,属性值获取元素对象集合
    3. Elements:元素Element对象的集合,可以当做ArrayList< Element >使用

    4. Element对象:元素对象

      1. 获取子元素对象(子元素也是element对象):
        1. getElementsByTag(String name):根据标签名获取元素集合
        2. getElementsByAttribute(String key):根据属性名称获取元素对象集合
        3. getElementsByAttributeValue(String key, String value):根据对象的属性名,属性值获取元素对象集合
      2. 获取属性值
        1. String attr(String key):根据属性名获取属性值
      3. 获取文本内容:
        1. String text ():获取所有子标签的纯文本内容
        2. String html():获取标签体的所有内容,包括子标签的标签和文本内容
    5. Node:节点对象,是Document和Element的父类

    7.Jsoup的两种快捷查询方式

    1. selector:选择器

      1. 方法:Elements select(String cssQuery);
      // 获取user标签,并且id=001的子标签age标签
      Elements el = document.select("user[id="001"] > age");
      System.out.println(el);
      
      // 获取id值为001的元素
      Elements select = document.select("#001");
      System.out.println(select);
      
    2. Xpath:xml路径语言,用来确定xml

      1. 需要导入jar包

      具体语法要去查看Xpath文档,简单的几个

      1. // 标签名:查找所有标签
      2. / 标签名:子标签
      3. [ @id ] : 带有id属性的标签
      // 获取所有的user标签
      JXDocument jxDocument = new JXDocument(document);
      List<JXNode> jxNodes = jxDocument.selN("//user");
      
      for (JXNode jxNode : jxNodes) {
          System.out.println(jxNode);
      }
      // 获取所有user标签下的age标签
      System.out.println("============================");
      
      List<JXNode> jxNodes1 = jxDocument.selN("//user/age");
      for (JXNode jxNode : jxNodes1) {
          System.out.println(jxNode);
      }
      
      System.out.println("===============================");
      
      // 获取带有id属性的user标签
      List<JXNode> jxNodes2 = jxDocument.selN("//user[@id]");
      for (JXNode jxNode : jxNodes2) {
          System.out.println(jxNode);
      }
      System.out.println("===============================");
      
      
      // 获取带有id属性,且属性值是001,的user标签
      List<JXNode> jxNodes3 = jxDocument.selN("//user[@id='001']");
      for (JXNode jxNode : jxNodes3) {
          System.out.println(jxNode);
      }
      
  • 相关阅读:
    怎么在一个线程结束后回到主线程?
    iOS KVC & KVO
    iOS添加到购物车的简单动画效果
    如何在键盘出现时滚动表格,以适应输入框的显示
    iOS开发之多媒体播放
    算法的时间复杂度(一)
    SPI通信
    三级管的原理
    stm32之595(spi芯片)
    stm32之Systick(系统时钟)
  • 原文地址:https://www.cnblogs.com/zhuobo/p/10750712.html
Copyright © 2011-2022 走看看