什么是XML?

XML是可拓展标记语言,它和XHTML很像、但它和XHTML的目的性不一样,XHTML负责展示数据,而XML负责保存或交换传输数据。

而且XML可拓展,它没有固定的标签、它的标签可以自定义。

功能

  1. 数据存储。(可作为小型数据库,配置文件)
  2. 数据传输、交换。(ajax,web服务:天气查询,电话号码归属地查询等)

结构

XML是树形结构,必须拥有一个根节点:

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book number="0593">
        <name>1984</name>
        <category>文学</category>
    </book>
    <book number="1578">
        <name>史记</name>
        <category>历史</category>
    </book>
    <book number="5493">
        <name>西西弗神话</name>
        <category>哲学</category>
    </book>
</books>

注:根节点必须且只有一个,XML的节点有三种:元素,属性,文本。

实体引用

当我们编写含有特殊符号的文本时需要用到实体转移:

  • &lt:         <
  • &gt:        >
  • &amp:     &
  • &apos:    '
  • quot:      "

当文本含有过多的特殊符号时 可以使用CDATA处理:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <some_string>
        <![CDATA[
        slie'se'f'd"sa"<>fe &&&&&
        ]]>
    </some_string>
</root>

DTD

DTD是用来规范XML的,XML是可拓展的标记语言,元素可以随意编写 所以我们需要一种机制来约束或者说规范XML文档,特别是在传输数据时。

验证网站:http://validator.w3.org

元素定义

<!ELEMENT 元素名 元素内容模型>

我们需要处理5种元素:

  • 仅仅包含元素的元素
  • 仅仅包含文本的元素
  • 包含文本和元素的混合元素
  • 空元素
  • 任意元素

我们以后会经常使用的符号:

  1. EMPTY              代表元素为空           <!ELEMENT 元素名 EMPTY>
  2. ANY                  代表任何内容           <!ELEMENT 元素名 ANY>
  3. (#PCDATA)       代表之包含文本     <!ELEMENT 元素名 (#PCDATA)>
  4. ()                     代表要包含的子元素  <!ELEMENT 元素名 (子元素)>
  5. ,                      代表子元素的顺序      <!ELEMENT 元素名 (子元素1,子元素2,…………)>          如果使用顺序符号,那么编写XML时子元素的顺序必须按照DTD的顺序编写
  6. |                      代表或                    <!ELEMENT 元素名 (子元素1|子元素2)>                    或的意思是 两个子元素必须二选一 且必须出现
  7. +                     代表至少出现一次      <!ELEMENT 元素名 (子元素1+)>                             子元素1至少出现一次
  8. *                     代表可0或任意次数     <!ELEMENT 元素名 (子元素1*)>                             子元素1可不出现,也可出现多次
  9. ?                     代表出现0或1次         <!ELEMENT 元素名 (子元素1?)>                              子元素1可不出现,或只能出现一次
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
    <!ELEMENT books (book+)>
    <!ELEMENT book (name,category)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT category (#PCDATA)>
]>

<books>
    <book>
        <name>1984</name>
        <category>文学</category>
    </book>
    <book>
        <name>史记</name>
        <category>历史</category>
    </book>
    <book>
        <name>西西弗神话</name>
        <category>哲学</category>
    </book>
</books>

包含混合元素:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
    <!ELEMENT books (book+)>
    <!ELEMENT book (name,category)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT category (#PCDATA|some_element)*>
    <!ELEMENT some_element (#PCDATA)>
]>

<books>
    <book>
        <name>1984</name>
        <category>文<some_element>sliejfj</some_element>学</category>
    </book>
    <book>
        <name>史记</name>
        <category>历史</category>
    </book>
    <book>
        <name>西西弗神话</name>
        <category>哲学</category>
    </book>
</books>

属性定义

格式:<!ATTLIST 元素名 属性名 属性值类型 取值方式>

属性值类型:

  • CDATA:字符类型。
  • (en1,en2....):枚举中的一个。
  • ID:值是唯一的ID,只允许出现一次。
  • IDREF:值是另一个元素的ID。
  • IDREFS:值为其他ID列表。
  • NMTOKEN:值为合法的XML名称。
  • NMTOKENS:值为合法的XML名称列表。
  • ENTITY:值为一个实体。
  • ENTITIES:实体列表。
  • NOTATION:符号的名称。
  • xml:值是预定义的xml值。

取值方式:

  • REQUIRED:属性值是必须的。
  • IMPLIED:属性值不是必须的。
  • FIXED value:属性值是固定的,如果没有声明 则默认是这个值,如果声明了 那只能写这个值。

例子1:

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

<!DOCTYPE books[
    <!ELEMENT books (book+)>
    <!ELEMENT book (name)>
    <!ELEMENT name (#PCDATA)>
    <!ATTLIST book category CDATA #REQUIRED>
    <!ATTLIST name order CDATA #IMPLIED>
]>

<books>
    <book category='工具书'>
        <name order='0'>PHP经典实例</name>
    </book>

    <book category='历史'>
        <name>三国志</name>
    </book>
</books>

例子2:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
    <!ELEMENT books (book)*>
    <!ELEMENT book (name)>
    <!ELEMENT name (#PCDATA)>
    <!ATTLIST name lang (en|zh) #IMPLIED>
]>

<books>
    <book>
        <name lang='en'>ThinkPHP</name>
    </book>
</books>

例子3:默认值写法,如果没有声明用默认值,如果声明了 则覆盖默认值。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
    <!ELEMENT books (book)*>
    <!ELEMENT book (name)>
    <!ELEMENT name (#PCDATA)>
    <!ATTLIST name lang (en|zh) 'zh'>
]>

<books>
    <book>
        <name lang='en'>ThinkPHP</name>
    </book>
</books>

例子4:一个元素含有多个属性

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
    <!ELEMENT books (book)*>
    <!ELEMENT book (name)>
    <!ELEMENT name (#PCDATA)>
    <!ATTLIST name lang (en|zh) #REQUIRED
                    id ID #REQUIRED>
]>

<books>
    <book>
        <name lang='en' id='q1'>ThinkPHP</name>
    </book>
</books>

我的PHP之旅--XML初步的更多相关文章

  1. 我的PHP之旅--XML操作

    XML操作 XML主要是做数据存储和WEB服务的,所以我们难免要操作它,这里只介绍PHP的simpleXML方式. 我们要操作的XML: <?xml version="1.0" ...

  2. LINQ TO XML初步了解

    最近简单的学习了一下LINT TO XML,写篇博客在这,方便以后查看~~ 1.常用到的类   XmlDocument --    文档(xml文件)     XmlElement    --     ...

  3. xml 初步学习 读取

    引入xml文件    function loadXMLDoc(dname) {         if (window.XMLHttpRequest) {             xhttp = new ...

  4. xml初步,DTD和Schema约束

    XML 可扩展的标记语言(!!!可扩展) 作用 1.存放数据 2.配置文件 语法 文档声明 <?xml version="1.0" encoding="UTF-8& ...

  5. LinQ实战学习笔记(一) LINQ to (Objects, XML, SQL) 入门初步

    LINQ对于笔者来说, 优美而浓缩的代码让人震惊. 研究LINQ就是在艺术化自己的代码. 之前只是走马观花学会了基本的语法, 但是经常在CSDN看到令人惊讶自叹不如的LINQ代码, 还是让人羡慕嫉妒恨 ...

  6. Java学习笔记(十三一)——Xml 常用知识总结

    [前面的话] 在学习spring框架,发现很多地方都用到了Xml的知识,所以会过头来再学习学习Xml. 本章学习的是Xml的基础,所以基础性文章,选择性阅读. [Xml] 一.Xml初步了解 XML ...

  7. Python爬取CSDN博客文章

    0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...

  8. 新一代编程:scala泛函编程技术-唠叨

    准备了半年后,终于决定在这里开始我的scala编程技术学习体验撰写之旅.初步打算在这里把我学习.体验.掌握scala编程的过程与有兴趣的朋友分享.我想,虽然我这不是正式论文或者教课书之类的,但写个开场 ...

  9. Android自动化初探:ADB

    Info:经过一段时间的准备,从今天开始自学Android之旅,初步学习会有疏漏,以后的每篇文章,我都会不断修改补全,直到完美. 2014-10-09:初版 --------------------- ...

随机推荐

  1. Tomcat - 持久化 Session

    Session 是保存在内存中的,如果服务器重启.宕机的话,Session 就会丢失.有时候,我们需要对 Session 持久化以应对意外的情况发生.例如,客户端与服务器在交互过程中,可能因为 Ses ...

  2. Jersey(1.19.1) - Client API, Security with Http(s)URLConnection

    With Http(s)URLConnection The support for security, specifically HTTP authentication and/or cookie m ...

  3. Networking - Ethernet II 帧

    Ethernet II 帧格式 DA SA Type Playload FCS DA(Destination Address): 该字段有 6 个字节,表示目的 MAC 地址. SA(Source A ...

  4. nginx限制ip请求次数 以及并发次数

    如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候.其中CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见 ...

  5. beeline连接hive server遭遇MapRedTask (state=08S01,code=1)错误

    采用beeline连接hive server是遭遇到如下错误: 5: jdbc:hive2://bluejoe0/default> select * from hive_triples wher ...

  6. 检测SqlServer服务器内存是否瓶颈

    性能监视器临视以下数据: Memory->Available MBytes  可用的内存  windows系统不低于1G,如果可用内存不多,则系统要求sqlserver释放内存 Paging F ...

  7. Qt实现桌面动态背景雪花飘落程序

            曾经收到过一份礼物,一个雪花飘落的程序,觉得效果很炫,通过前几篇的学习,我们已经掌握了贴图的一些技巧了,那么现在就可以自己实现了(当然你必须先拥有qt信号与槽的基础知识),这里先看效果 ...

  8. SAP校园招聘笔试

    一直就向往着SAP公司,终于,有幸今天参加了SAP校园招聘的笔试.下面我就来简单说说这个笔试的内容. 笔试分为两大部分,一部分是逻辑题,就是些什么阅读分析计算balabala的一堆,是全英文的.另外一 ...

  9. C++ 读取 pcap文件.

    http://blog.csdn.net/haolipengzhanshen/article/details/51854853 1.了解下pcap文件的结构 2.定义pcap文件头部结构体pcapFi ...

  10. jobs

    fg.bg.jobs.&.ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的一.& 最经常被用到这个用在一个命令的最后,可以把这个命令放到 ...