您当前的位置: 首页 >  Java

彭世瑜

暂无认证

  • 0浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java学习路线-45:XML快速入门(1)- XML、DTD、JAXP、Schema

彭世瑜 发布时间:2020-02-14 11:21:09 ,浏览量:0

第1 章 : XML入门 课时1 XML简介

eXtensible Markup Language 主要使用1.0版本

语言中文名称用途html标记型语言显示数据xml可扩展标记型语言存储数据 课时2 XML的应用

1、传输数据 2、表示有关系的数据 3、配置文件

课时3 XML的文档声明

(1)xml的文档声明 (2)定义元素(标签) (3)注释 (4)特殊字符 (5)CDATA区 (6)PI指令

文件*.xml

1、xml的文档声明 必须写在第一行第一列



属性: version 版本 1.0 encoding 编码 gbk/utf-8 standalone 依赖其他文件 yes/no

课时4 XML中文乱码问题解决


    张三
    23
  
课时5 XML元素的定义

1、只能有一个根标签 2、合理嵌套 3、空格和换行都会当做原始内容解析 4、有开始必须有结束

  

5、标签没有内容,可以在标签内结束

 

标签命名规则 (1)区分大小写 (2)不能以数字下划线开头 (3)不能以xml、XML、Xml等开头 (4)不能包含空格和冒号 (5)标签可以是中文

课时6 XML属性的定义

html和xml都是标记型文档,可以有属性


属性要求 (1)一个标签可以有多个属性 (2)属性名称不能相同 (3)属性名称与属性值之间使用等号(=) (4)属性值使用引号(单引号或双引号)包起来 (5)属性名命名贵方和元素的命名规范一致

课时7 XML注释

注释不能嵌套 注释不能放到第一行

课时8 XML特殊字符

>> 课时10 XML的PI指令

Processing Instruction 可以在xml中设置样式 只能对英文标签起作用




    张三
    23
  

demo.css

name{
    color: green;
}
课时11 XML约束简介

1、xml语法总结 (1)所有xml元素都必须有关闭标签 (2)xml标签对大小写敏感 (3)xml必须正确嵌套 (4)xml必须有且只有一个根元素 (5)xml属性值需要加引号 (6)特殊字符必须转义 (7)原样输出文本使用 (8)xml中的空格、回车换行在解析时会被保留

2、xml的约束 (1)dtd约束 (2)scheme约束

第2 章 : DTD(文档类型定义) 课时12 DTD快速入门

文件*.dtd,使用idea打开会提示 文档类型定义(DTD,Document Type Definition)

1、复杂元素:有子元素的元素



eg:

2、简单元素



eg:

3、引入dtd文件


示例




    张三
    23

demo.dtd




课时13 DTD的三种引入方式

1、引入外部


2、引入内部


        
]>

3、使用网络


课时14 使用DTD定义元素

语法


1、简单元素:没有子元素的元素


(#PCDATA) 字符串(需要加括号) EMPTY 元素为空 ANY 任意

2、复杂元素


(1)子元素出现次数 + 一次或多次 ? 零次或一次 * 零次或多次

(2)子元素分隔符 逗号隔开:表示出现顺序 竖线隔开:表示任意一个

eg:






课时15 使用DTD定义属性

语法


1、属性类型 (1)CDATA 字符串 (2)(a|b|c) 枚举 (3)ID 值只能以字母或下划线开头

2、属性的约束 (1)#REQUIRED 属性必须存在 (2)#IMPLIED 属性可有可无 (3)#FIXED 属性必须是固定值 (4)默认值 不写属性做为默认值

eg:


课时16 定义实体

语法

定义


使用
&实体名称

实体需要定义在内部dtd

课时17 W3C的案例

https://www.w3school.com.cn/dtd/dtd_examples.asp

第3 章: XML解析之JAXP 课时18 XML解析简介

1、dom方式解析xml过程: 根据xml的层级结构,在内存中分配一个树形结构 把xml中每部分都封装成对象

(1)优点:方便实现增、删、改操作 (2)缺点:如果文件过大,造成内存溢出

2、sax方式解析xml过程: 采用事件驱动,边读边解析,从上到下,一行一行的解析, 解析到一个对象,把对象名称返回

(1)优点:不会造成内存溢出,实现查询 (2)缺点:不能实现增、删、改操作

课时19 JAXP API的查看

dom和sax解析器: (1)sun公司 jaxp (2)dom4j组织 dom4j(实际开发) (3)jdom组织 jdom

1、jaxp jaxp是javese一部分 javax.xml.parses

interface Node{
    // 添加节点
    public Node appendChild(Node newChild);

    // 移除节点
    public Node removeChild(Node oldChild);

    // 获取父节点
    public Node getParentNode();

    // 返回文本内容
    public String getTextContent()

}

interface NodeList{
    // 通过下标获取具体值
    public Node item(int index);

    // 得到集合长度
    public int getLength();
}

interface Document extends Node{
    // 获取标签
    public NodeList getElementsByTagName(String tagname);

    // 创建标签
    public Element createElement(String tagName);

    // 创建文本
    public Text createTextNode(String data);

}

abstract DocumentBuilder{
    public Document parse(File f)
}

abstract DocumentBuilderFactory{
    public static DocumentBuilderFactory newInstance()
    public abstract DocumentBuilder newDocumentBuilder()
}

abstract class SAXParser{}

abstract class SAXParserFactory{}
课时20-21 使用JAXP查询节点

示例:查询xml中所有name值

demo.xml



    
        张三
        23
    
    
        李四
        24
    

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

public class Demo {
    /**
     * 1、创建解析器工厂
     * 2、根据解析器工厂创建解析器
     * 3、解析xml返回document
     *
     */
    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = factory.newDocumentBuilder();

        Document document = builder.parse("demo.xml");

        NodeList list = document.getElementsByTagName("name");

        for (int i = 0; i  

scheme符合xml语法 一个xml可以有多个scheme,使用名称空间区分 dtd有PCDAT类型scheme支持更多数据类型 scheme语法更加复杂

Schema 教程 https://www.w3school.com.cn/schema/index.asp

课时27 Schema的开发过程

文件*.xsd

1、属性


xmlns="http://www.w3.org/2001/XMLSchema"


targetNamespace="http://www.w3school.com.cn"


elementFormDefault="qualified"

2、复杂元素


    
        
        
    

3、引入约束文档

表示被约束文档,别名xsi
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

路径地址
xsi:schemaLocation="http://www.w3school.com.cn demo.xsd">

完整示例 demo.xsd



    
        
            
                
                
            
        
    

引入xsd文件



        张三
        23

课时28 Schema约束API查看

sequence 表示元素出现顺序 all 只能出现一次 choice 出现任意一个 maxOccurs=“unbounded” 出现次数没有限制 any 任意元素

复杂元素中定义属性


引入多个schema,可以给每个schema取别名

课时29 sax解析的过程

dom 内存虚拟树形结构 sax 事件驱动,边读边解析

package org.xml.sax;

public class HandlerBase{
    public void startElement (String name, AttributeList attributes);
    public void characters (char ch[], int start, int length);
    public void endElement (String name);
}


package org.xml.sax.helpers;

public class DefaultHandler{
    public void startElement (String uri, String localName,
                              String qName, Attributes attributes)    

    public void endElement (String uri, String localName, String qName)
    public void characters (char ch[], int start, int length)
}

课时30 使用Schema的sax方式操作xml

demo.xml



 
    张三  
    23 


使用jaxp的sax解析只能进行查询操作


import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class Demo {
    
    public static void main(String[] args) throws Exception {

        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();

        // 传入事件处理类
        parser.parse("demo.xml", new MyDefaultHandler());

    }
}

/**
 * 自定义事件处理
 */
class MyDefaultHandler extends DefaultHandler {

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) {
        System.out.println(qName);
    }

    @Override
    public void endElement(String uri, String localName, String qName) {
        System.out.println(qName);
    }

    @Override
    public void characters(char[] ch, int start, int length) {
        System.out.println(new String(ch, start, length));
    }
}

关注
打赏
1665367115
查看更多评论
0.2784s