xml入门学习笔记(内含部分代码)

XML

1.概念:可扩展标记语言
*可扩展:标签都是自定义的。
2.功能:存储数据:1.配置文件,2.在网络中传输

3.xml和html的区别

  1. xml的标签是自定义的,html标签是预定义的
  2. xml语法非常严格。html语法松散
  3. xml是存储数据的,html是展示数据的

*w3c:万维网联盟

4.语法:
*基础语法:

  1. xml文档的后缀名是.xml
  2. 第一行必须定义为文档声明
  3. xml文档中有且仅有一个根标签
  4. 属性值必须使用引号引起来(单双引号都可以)
  5. 标签必须有结束标签(也可以定义自闭合标签)
  6. xml的标签名称区分大小写
    如:
    在这里插入图片描述

*组成部分:

  1. 文档声明
  • 格式:<?xml 属性列表>
  • 属性列表:1.version-版本号,2.encoding-编码方式(默认值iso-8859-1),3.standalone-是否独立(yes:不依赖其他文件,no:依赖其他文件)
  1. 指令(了解即可):结合css展示数据
    引入a.css使得名字变成红色
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/css" href="a.css" ?>
<users>
    <user id="1">
        <name>张三</name>
        <age>23</age>
        <gender>man</gender>
    </user>
    <user id="2">
        <name>李四</name>
        <age>24</age>
        <gender>woman</gender>
    </user>
</users>
  1. 标签:自定义的,命名方式与java类似
  2. 属性 :id属性值唯一
  3. 文本:特殊字符需要转译
    *CDATA区:该区域中的数据会被原样展示
<![CDATA[需要原样展示的数据]]>
  1. 约束:规定xml文档的书写规则
    *要求能够在xml种引用约束文档,能够简单的读懂约束文档
    *分类:
    • DTD:一种简单的约束技术
    • Schema:一种复杂的约束技术
  • DTD
  1. 引入dtd文档导入xml文档中
    • 内部dtd:将约束规则定义在xml文档中
    • 外部dtd:将约束规则定义在外部的dtd文件中
      *本地:
      *网络:
  2. Schema:
    • .填写xml文档的根元素
    • 引入xsi前缀. xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
    • 引入xsd文件命名空间. xsi:schemaLocation=“http://www.itcast.cn/xml student.xsd”
    • 为每一个xsd约束声明一个前缀,作为标识 xmlns=“http://www.itcast.cn/xml”

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

  • 操作xml文档
    1. 解析(读取):讲文档中的数据读取到内存中
    2. 写入:将内存中的数据保存到xml文档中,持久化的储存
  • 解析xml的方式:
    1. DOM:将标记语言文档一次性加载进内存,在内存中形成一棵DOM树
      *优点:操作方便,可以对文档进行CRUD的所有操作
      *缺点:比较的消耗内存
    2. SAX:逐行读取,基于事件驱动
      *优点:因为逐行读取所以不占内存
      *缺点:只能读取,不能增删改
  • 常见的xml解析器
    1. JAXP:sun公司提供的解析器,支持dom和sax两种思想
    2. DOM4J:一款非常优秀的解析器
    3. Jsoup:一款java的html解析器
    4. PULL:Android系统内置的解析器,是sax方式的
  • Jsoup解析器:
    1. 快速入门:

模板代码

package Jsoup;

        import org.jsoup.Jsoup;
        import org.jsoup.nodes.Document;
        import org.jsoup.nodes.Element;
        import org.jsoup.select.Elements;

        import java.io.File;

/*
    Jsoup快速入门
 */
public class JsoupDemo1 {
    public static void main(String[]args)throws Exception{
        //获取Document对象
        //根据xml文档来获取

        //获取sudent.xml的path
        String path=JsoupDemo1.class.getClassLoader().getResource("dtd/student.xml").getPath() ;
        //解析xml文档,加载文档进内存,获取dom树(document对象)
        Document document= Jsoup.parse(new File(path),"utf-8");
        //根据标签名称获取元素对象
        Elements elements= document.getElementsByTag("name");
        System.out.println(elements.size());
        //获取第一个element对象
        Element element=elements.get(0);
        String name=element.text();
        System.out.println(name);
    }
}

  • 对象的使用
    1. Jsoup:工具类,可以解析html或者xml文档,返回document,方法:
      • parse:解析html或xml文档,返回document
        *parse(获取的文件 ,“编码方式”):解析xml或html
        *parse(“html字符串”):解析字符串形式的文件
        *parse(URL url,int timeoutMillis):通过 网络路径获取html或者xml文档
    2. Document:文档对象,内存中的dom树
      获取Element对象
      • getElementsByTag(String tagname):根据标签名称获取Element对象集合
      • getElementsByAttribute(String key):根据属性名称获取Element对象集合
      • getElementsByAttributeValue(String key,String value):根据对应的属性名和属性值获取Element对象集合
      • getElementById(String id):根据id获取Element
    3. Elements:元素Element对象的集合,可以当作ArrayLis<Element>
    4. Element:元素对象
      • 获取子元素的element对象:方法名和document一致
      • 获取属性值
        *String sttr(String key):根据属性名称获取属性值
      • 获取文本
        *String text():获取子标签文本内容(不包含标签体)
        *String html():获取子标签的所有内容(包括子标签的标签体内容)
    5. Node:节点对象
      *是document和element的父类
  • 快捷的查询方式:
    1. selector:选择器
      *使用的方法:Elements.select(String cssQuery)
      • 语法:selector类中定义的语法
    2. XPath:xml的路径语言,是一种确定xml文档中某部分位置的语言

快捷语法模板

package Jsoup;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;

/*
    selector选择器查询
 */
public class JsoupDemo5 {
    public static void main(String[]args)throws Exception{
        //获取sudent.xml的path
        String path= JsoupDemo5.class.getClassLoader().getResource("student.xml").getPath() ;
        //解析xml文档,加载文档进内存,获取dom树(document对象)
        Document document= Jsoup.parse(new File(path),"utf-8");
        //查询name标签
        Elements elements = document.select("name");
        System.out.println(elements);
        System.out.println();
        //查询id值为ittast的元素
        Elements elements1 = document.select("#ittast");
        System.out.println(elements1);
        System.out.println();
        //获取studnet标签,并且number属性值为s01
        Elements elements2 = document.select("student[number='s01']");
        Elements age = elements2.select("age");
        System.out.println(elements2);
        System.out.println();
        //获取studnet标签,并且number属性值为s01的age子标签
        Elements elements3 = document.select("student[number='s01']>age");// >代表一级子标签 直接空格获取子孙age标签
        System.out.println(elements3);
        System.out.println();

    }
}

package Jsoup;

import cn.wanghaomiao.xpath.model.JXDocument;
import cn.wanghaomiao.xpath.model.JXNode;
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.util.List;

/*
    XPath查询
 */
public class JsoupDemo6 {
    public static void main(String[]args)throws Exception{
        //获取sudent.xml的path
        String path= JsoupDemo6.class.getClassLoader().getResource("student.xml").getPath() ;
        //解析xml文档,加载文档进内存,获取dom树(document对象)
        Document document= Jsoup.parse(new File(path),"utf-8");
        //根据document对象创建JXDocument对象
        JXDocument jxDocument=new JXDocument(document);
        //结合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);
        }
        System.out.println("--------------");
        //查询student标签下带有id属性的name标签
        List<JXNode> jxNodes2 = jxDocument.selN("//student/name[@id]");
        for (JXNode jxNode : jxNodes2){
            System.out.println(jxNode);
        }
        System.out.println("-------------");
        //查询student下带有id属性的name标签并且id属性值为ittast
        List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id='ittast']");
        for (JXNode jxNode : jxNodes3){
            System.out.println(jxNode);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值