web复习day01:xml

XML概述

XML是一种可扩展标记(标签)语言(EXtensible Markup Language),类似于html,html的标签是定义好的,而XML中的标签是我们自己规定的.

XML 是一种标记(标签)语言

XML 标签没有被预定义。您需要自行定义标签。

XML 的设计宗旨是传输数据,而非显示数据     ---  json代替xml的数据传递

    注:html设计的宗旨是为了展示数据

XML 被设计为具有自我描述性(就是易于阅读)。

    eg:不同语言之间数据传递,可借助于xml

==注意:== 

    XML 是 W3C 的推荐标准.

    W3C在1988年2月发布1.0版本,2004年2月又发布1.1版本,但因为1.1版本不能向下兼容1.0版本,所以1.1没有人用。同时,在2004年2月W3C又发布了1.0版本的第三版。我们要学习的还是1.0版本。

XML作用

1.存储数据,传递数据的载体    --- json 

==2.配置文件(★★★)== 

XML入门

编写persons.xml文件

==XML组成==★

文档声明:

==格式: <?xml version="1.0" encoding="UTF-8"?>==  

    注: 文档声明必须放在文档的开头(首行首列)

    verson:  版本号(一般采用1.0)

    encoding: 当前文件的编码方式(UTF-8)

元素(标签):

概述:

    元素指的就是xml中的标签,标签名称自定义

格式:

    格式1: <person>标签体(元素体)</person>   // 双标签 (围堵标签)

    格式2: <person/>  // 单标签(空标签)

注意事项:

    1.标签名称==区分==大小写

    2.不能使用空格,不能使用冒号

    3.不建议以XML、xml、Xml开头

    4.格式化良好的XML文档,有且仅有一个根元素。

属性: 标签上的属性

格式:

    <xxx 属性名="值" 属性名="值"></xxx>

    <xxx 属性名="值" />

属性是元素的一部分,必须写在开始标签中

属性的定义格式:属性名=“属性值”,其中属性值必须使用单引或双引号括起来

一个元素可以有0~N个属性,但一个元素中不能出现同名属性

属性名不能使用空格 , 不要使用冒号等特殊字符,且必须以字母开头

注释:

对xml中标签的描述(程序员自己看的注释)

格式:  <!-- 我是xml的注释 -->

转义字符:

xml中的特殊符号有特定的意义(eg : >  < ),如果需要显示特殊符号需要转义

使用时参考文档即可   

字符区(了解):

如果要显示的特殊符号较多,直接在字符区编写. 不需要在转义,字符区的内容不会被解析

格式:  <![CDATA[文本内容]]>

    注: CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束;

小结:

xml组成:
    文档声明:
        <?xml version="1.0" encoding="utf-8" ?> : 首行首列
    元素:
        标签:
            双标签
            单标签
    属性:
        <xxx 属性名称="值" 属性名称="值" ..... ></xxx>
        <xxx 属性名称="值" 属性名称="值" ..... />
    注释:
        <!--  -->
    转义符:
        &gt; &lt;
    字符区:
        <![CDATA[不会被转义的字符]]>

XML约束(了解)
DTD约束

DTD是文档类型定义(Document Type Definition)

概述

    DTD 可以定义 XML 文档中出现的元素、这些元素出现的次序、它们如何相互嵌套以及XML文档结构的其它详细信息

    扩展名: *.dtd

语法:(了解)

    文档声明: 声明当前xml遵循的约束

    方式1:内部DTD,在XML文档内部嵌入DTD,只对当前XML有效

        <!DOCTYPE 根元素 [...//具体语法]><!‐‐内部DTD‐‐>

    方式2:外部DTD—本地DTD,DTD文档在本地系统上,企业内部自己项目使用。

        <!DOCTYPE 根元素 SYSTEM "bookshelf.dtd"><!‐‐外部本地DTD‐‐>

    方式3:外部DTD—公共DTD,DTD文档在网络上,一般都有框架提供 , 也是我们使用最多的.

        <!DOCTYPE web‐app PUBLIC "‐//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web‐app_2_3.dtd">

元素声明(了解)

约束元素的嵌套层级

        <!ELEMENT 父标签 (子标签1,子标签2,…)>

约束元素体里面的数据

        <!ELEMENT 标签名字 标签类型>

标签类型 代码写法 说明
PCDATA (#PCDATA) 被解析的字符串数据(字符串数据)
EMPTY EMPTY 即空元素,例如<hr/>
ANY ANY 即任意类型

数量词(掌握)

        数量词符号       含义

            *           表示元素可以出现0到多个

            +           表示元素可以出现至少1个

            ?           表示元素可以是0或1个

            ,           表示元素需要按照顺序显示

            |           表示元素需要选择其中的某一个

<!ELEMENT 书架 (书+)> <!-- 约束根标签的名称为 "书架"  及子标签出现的次数-->
<!ELEMENT 书 (书名,作者,售价)><!--约束元素书的子元素必须为书名、作者、售价-->
<!ELEMENT 书名 (#PCDATA)> <!-- PCDATA: 约束标签体信息为字符串  -->
<!ELEMENT 作者 EMPTY> <!-- EMPTY: 约束当前标签为单标签-->
<!ELEMENT 售价 ANY> <!-- ANY: 标签类型任意 -->

属性声明(了解)

  设置指定标签上的属性

    格式:   Attribute(属性)

<!ATTLIST 标签名称
        属性名称1 属性类型1 属性说明1
        属性名称2 属性类型2 属性说明2        
        …        
>

    数据类型:

属性类型 含义
CDATA 代表属性是文本字符串, eg:<!ATTLIST 属性名 CDATA 属性说明>
ID 代码该属性值唯一,不能以数字开头, eg:<!ATTLIST 属性名 ID 属性说明>
ENUMERATED 代表属性值在指定范围内进行枚举 Eg:<!ATTLIST属性名 (社科类|工程类|教育类) "社科

    属性说明:

属性说明 含义
#REQUIRED 代表属性是必须有的
#IMPLIED 代表属性可有可无
#FIXED 代表属性为固定值,实现方式:book_info CDATA #FIXED "固定值"

    代码:

<!ATTLIST 书     // 被约束的标签
    //   属性名 属性类型  描述
         name   CDATA   #REQUIRED   // 属性
    >

    <!ATTLIST 书
        id ID #REQUIRED // ID: 约束当前属性值唯一
        name CDATA #REQUIRED // CDATA: 约束当前属性的值为字符串
        出版社 (传智播客|北大|清华) #REQUIRED  // ENUMERATED: 枚举值
      >

      <!ATTLIST 书
            id ID #REQUIRED // #REQUIRED: 约束该属性必须存在
            name CDATA #IMPLIED  // #IMPLIED: 约束该属性可有可无
            出版社 (传智播客|北大|清华) "传智播客" // #FIXED: 设置默认值
        >

小结:

约束元素的名称和次序,约束元素上的属性
一个xml文件只能被一个dtd文件约束
没有办法进一步约束标签体内容的类型,若要想约束标签体内容的类型,需要学习 schema约束

schema约束

概述:

    Schema 比DTD强大,是DTD代替者

    Schema 本身也是XML文档,Schema文档扩展名为xsd,而不是xml

    Schema 功能更强大,数据类型约束更完善

    ==schema可以进一步约束标签体数据的类型==

约束文件后缀名

    *.xsd

注意:

    一个xml文件可以被多个schema文件约束,为了防止不同的约束文件中有相同名称的标签,我们采用命名空间

    一个xml文件可以被多个schema文件约束.
    为了区分不同的约束文件,我们可以给约束文件起别名    
    xmlns: xml  namespace(命名空间)
    引入schema约束文件方式:
        xmlns: xml namespace
    targetNamespace: 为约束文件设置名称(给约束文件起名称)
    elementFormDefault:
        qualified; 严格的语法格式
        unqualified: 不严格的语法格式

解析XML
解析XML的多种方式

DOM:document

    需要解析器把整个XML文档装载到内存,并解析成一个Document对象

    优点:元素与元素之间保留结构关系,故可以进行增删改查操作。

    缺点:XML文档过大,可能出现内存溢出

SAX(了解):

    是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都触发对应的事件。(了解)

    优点:处理速度快,可以处理大文件

    缺点:只能读,逐行读取资源并释放资源,解析操作繁琐。

PULL(了解)

    Android内置的XML解析方式,类似SAX。(了解)

==Dom4j==

解析xml步骤:

1.导入jar包

2.创建核心解析对象( SAXReader )

3.以流的方式读取被解析的xml文件 (document对象)

4.获取dom树中的元素,属性,文本信息.

常用API:

SAXReader对象★

            SAXReader saxReader = new SAXReader();   //创建核心解析对象

            Document document = saxReader.read("xml流"); 

Document:★

            Element rootElement = document .getRootElement();  // 获取根元素对象

Element对象:

            List elements([String ele] )  ★

                获得指定名称的所有子元素。可以不指定名称

            Element element(String ele) 

                获得指定名称第一个子元素。

            String getName() 

                获得当前元素的元素名

            String attributeValue(String attrName)  ★

                获得指定属性名的属性值

            String elementText(Sting ele)  

                获得指定名称子元素的文本值

                ele: 子标签名称

            String getText()  ★

                获得当前元素的文本内容

Dom4J结合XPath解析XML

se: java.lang.

ee: javax..

使用步骤:

    1:导入jar包(dom4j和jaxen-1.1-beta-6.jar)

    2:通过dom4j的SAXReader获取Document对象

    3:利用Xpath提供的api,结合xpath的语法完成选取XML文档元素节点进行解析操作。document常用的api

常用方法:

    List selectNodes("表达式")  获取符合表达式的元素集合

    Element selectSingleNode("表达式")  获取符合表达式的唯一元素

XPath语法(了解):

    /     根节点

    //    任意节点

    ./     当前节点

    ../    当前节点的父节点

    @   选取属性

转载于:https://blog.51cto.com/13859849/2396938

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值