xml 深入学习

参考:http://blog.csdn.net/erlian1992/article/details/51569678

专业术语

DTD document type defination 文档类型定义

PCDATA parsed character data 已解析字符数据

XSD xml shcema Defination XML模型定义

1.简介

xml 可扩展标记语言 Extensible Markup Language

XML的设计宗旨是传输数据,而非显示数据

  • 和html 的差异

1.xml传输数据 html 显示数据 设计的目的不一样

2. html 的标签固定 xml的标签不固定

  • xml的用处

1. 描述事物的树形结构

2.作为配置文件

3.解决数据传输不规范的情况

4. 是html 的补充 简化了数据传输,共享

5. 应用场景: HTML,WSDL,WAP,RSS,RDF,OWL,SML

xml 是纯文本

2.语法

分成文档声明,元素,属性,注释,CDATA区域,特殊字符,处理指令几块

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

<!-- 上面是声明 -->

<?xml-stylesheet type="text/css" href="xml2.css" ?>

<!-- 上面是处理指令 -->

<books>

<!-- 根 -->

<!-- comments -->

<![CDATA[contents what ever]]>

<!-- CDATA 下面一段是错误代码区-->

<book attr=‘wow‘> <!-- 属性 这些注释是错误的 -->

<name>My life</name> <!-- 元素 这些注释是错误的-->

<price>100$</price>

</author><!-- 空标签 这些注释是错误的 空标签这种也不合格 我使用simplexml_load_file函数解析xml 的时候会出错-->

<author/> <!-- 这个才是正确的写法 -->

</book>

<book>

<name>Your Life</name>

<price>101$</price>

<author>Someone</author>

</book>

</books>

上面一部分错误的xml正确写法

<book attr=‘wow‘>

<name>My life</name>

<price>100$</price>

<author/>

</book>

1. 所有标签都有关闭标签 空标签简写 也必须是</author> 这样的

2.标签大小写敏感 <author>authorname</Author> 会发生错误

3.标签必须正确嵌套

4.必须有根标签

5.属性值加引号 单双都可以

6.标签里面的内容不能包含 <,>, & [ 三个都已经测试过不行,必须转义】

< &lt;

> &gt;

& &amp;

测试代码

$file = "/Users/dingmac/Desktop/demo.xml";

$string = file_get_contents($file);

$xml = simplexml_load_file($file);

var_dump($xml);

其中有个问题在解析元素的时候 在xml 中添加了注释<!-- 我是备注 -->

在解析的时候会出现 comments 元素 so 第7点上面的代码 元素部分

7. 所有注释不能放在元素名中间,也不能嵌套

8.元素内容中的空格 会保留 包括换行符

9.声明部分有几部分组成

version 版本号

encoding 编码

standalone yes|no 表示文档定义是否独立使用

10.标签命名规则

1.不能使用xml开始的名字

2.正常程序中使用的变量名字

3.不要使用- 使用_ 特殊符号 % & 等等别用 不要用: ,. 等 使用英语 中文也行 但是别扭不?

11.xml 是可以扩展的

12.属性通过 simplexml_load_file 函数解析之后 会出现下面的内容

["@attributes"]=>

array(1) {

["attr"]=>

string(3) "wow"

}

13.属性也能提供信息但是必须加引号,but 尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息 元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素

3.xml定义要遵循 DTD

DTD document type defination 文档类型定义

参考 http://blog.csdn.net/gavin_john/article/details/51532756

基本语法



#file myclass.dtd

<! ELEMENT 元素名 类型>

可以定义自己的DTD文件 文件名 myclass.dtd

<!ELEMENT class (student+)>

<!ELEMENT student (name,age,introduce)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT introduce (#PCDATA)>



#file demo.xml

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

<!-- 上面是声明 -->

<!DOCTYPE class SYSTEM "myclass.dtd">

<!-- 使用规则 SYSTEM使用本地文件,public 使用网络文件 -->

<class>

<student>

<name>周小星</name>

<age>23</age>

<introduce>学习刻苦</introduce>

<score>99</score>

</student>

<student>

<name>林晓</name>

<age>25</age>

<introduce>是一个好学生</introduce>

<score>100</score>

</student>

</class>



php 验证函数 参考 https://stackoverflow.com/questions/101935/validate-xml-using-a-custom-dtd-in-php

引用 : Take a look at PHP‘s DOM, especially DOMDocument::schemaValidate and DOMDocument::validate.

#file xml_validate.php

<?php

$dom = new DOMDocument();

$dom->load("demo.xml");

if($dom->validate()){

echo "The DOM is validate";

}



DTD 语法

1. 文件位置

本地文件

<!DOCTYPE 根元素 SYSTEM "DTD文件路径">

网络文件

<!DOCTYPE 根元素 PUBLIC "DTD 名称" "DTD url">

比如

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

2.基本语法 <!ELEMENT 元素 内容>

- ELEMENT是关键字,是不能修改的

- NAME表示元素名称

- CONTENT是元素类型,必须要大写!CONTENT的内容有三种写法:

(1)EMPTY——表示该元素不能包含子元素和文本,但可以有属性。

(2)ANY——表示该元素可以包含任何在该DTD中定义的元素内容

(3)#PCDATA——可以包含任何字符数据,但是不能在其中包含任何子元素

EMPTY < #PCDATA <ANY

另外一点需要注意的是 元素 内容之间一定要有空格 包括下面提到的第三点

3.元素的组合类型

<!ELEMENT 元素 类型>

demo:

<!ELEMENT class (student+)> 注意这边的空格是一定要的

符号 用途 示例 示例说明
() 用来给元素分组 (古龙|金庸),(王朔|余杰) 分成两组
| 在列出的对象中选择一个 (男人|女人) 表示男人或者女人必须出现,两者至少选其一
+ 该对象必须出现一次或者多次 (成员+) 表示成员必须出现,而却可以出现多个成员
* 该对象允许出现0次或者多次 (爱好*) 爱好可以出现两次到多次
? 该对象必须出现0次或者1次 (菜鸟?) 菜鸟可以出现,也可以不出现,如果出现的话,最多只能出现一次
, 对象必须按指定的顺序出现 (西瓜,苹果,香蕉) 表示西瓜、苹果、香蕉必须出现,并且按这个顺序出现

4.定义属性

<!ATTLIST 元素

属性名称 类型 属性的特点

属性名称 类型 属性的特点

...

>

属性的类型有

1. CDATA 字符数据 任何字符

<!ATTLIST student

address CDATA #REQUIRED

>

2.ID 唯一的字符串 不能以数字开头

<!ATTLIST student

no ID #REQUIRED

>

3.IDREF/IDREFS - IDREF属性的值指向文档中其它地方声明的ID类型的值 - IDREFS同IDREF,但是可以具有由空格分开的多个引用。

<!ATTLIST student

relID ID #REQUIRED

parentID IDREFS #IMPLIED

name CDATA #REQUIRED

>

4.Enumerated 属性类型-Enumerated,事先定义好一些值,属性的值必须在所列出的值的范围内。

<!ATTLIST student

marriage (sigle|married|devorced|widowed) #IMPLIED

>

5.ENTITY/ENTITIES

我测试下来如果要使用 ENTITY 就必须使用 内嵌的DTD 方式

<!DOCTYPE 节点名称 [

<!ENTITY copyright "this is copyright">

<!ELEMENT student (name,age,instroduce)>

]>

- 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。

- 在DTD定义中,一条!ENTITY语句用于定义一个实体。

- 实体可分为两种类型:引用实体和参数实体。引用实体是被XML文档应用的,而参数实体是被DTD文件本身应用的。

1.引用实体:

引用实体主要在XML文档中被应用

语法格式如下,引用实体的定义内容最好放在DTD文件的最后。

<!ENTITY 实体名称 "实体内容">

引用方式:&实体名称; 末尾要带上分号,这个引用将直接转变成实体内容

demo

#我测试下来在dtd 文件中定义没有用只能在xml里面定义才有用

<!DOCTYPE class SYSTEM "myclass.dtd"> // 这样在myclass.dtd 文件中定义没有用

只能在xml 文件中定义

<!DOCTYPE class [

<!ENTITY copyright "I am a Copyright">

]>

<copyright> &copyright</copyright>

在xml 里面直接使用 &copyright 可以直接调用 I am a Copyright

引用 外面文件

<!ENTITY chapter.1 SYSTEM "chapter1.xml"> // 本地文件

调用的时候 &chapter.1;

2.参数实体 被DTD文件本身应用的

<!ENTITY % 实体名称 "实体内容">

应用方式

% 实体名称; 记得分好 这个可以在DTD 文件中定义

demo

dtd 文件

#myclass.dtd

<!ELEMENT class (student+)>

<!ENTITY js "Jo Smith">

<!ENTITY % TAG_NAME "name|age|introduce">

<!ATTLIST student

address CDATA #IMPLIED

>

<!ELEMENT student (%TAG_NAME;|生日)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT introduce (#PCDATA)>

<!ELEMENT 生日 (#PCDATA)>

xml 文件

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

<!-- 上面是声明 -->

<!DOCTYPE class SYSTEM "myclass.dtd">

<class>

<student address="HONGKONG">

<name>周小星</name>

<age>23</age>

<introduce>学习刻苦</introduce>

</student>

<student address="Shanghai">

<name>林晓</name>

<age>25</age>

<introduce>是一个好学生 </introduce>

</student>

</class>

验证的时候将会有如下提示

Warning: DOMDocument::validate(): Element student content does not follow the DTD, expecting (name | age | introduce | 生日), got (name age introduce ) in /Users/dingmac/Desktop/xml_validator.php on line 5

说明生效了

属性的特点有

#REQUIED 表示这个属性必须给,不给就报错

#IMPLIED 表示这个属性可以给也可以不给

#FIXED value 表示这个属性必须给一个固定的value值

Default value 表示这个属性如果没有值,就分配一个默认的value值

demo <!ATTLIST name id CDATA "0">

修改上面的myclass.dtd 文件

<!ELEMENT class (student+)>

<!ENTITY js "Jo Smith">

<!ENTITY % TAG_NAME "name|age|introduce">

<!ATTLIST student

address CDATA #IMPLIED

>

<!ELEMENT student (%TAG_NAME;|birthday)+ >

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT introduce (#PCDATA)>

<!ELEMENT birthday (#PCDATA)>

xml 如下

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

<!-- 上面是声明 -->

<!DOCTYPE class SYSTEM "myclass.dtd">

<class>

<student address="HONGKONG">

<name>周小星</name>

</student>

<student address="Shanghai">

<name>林晓</name>

<age>25</age>

<introduce>是一个好学生 </introduce>

<birthday></birthday>

</student>

</class>

是ok的

最后看到了一个蛮好的解决方案

又是文本引用 也包含我们想要的 ENTITY 引用

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

<!-- 上面是声明 -->

<!DOCTYPE class SYSTEM "myclass.dtd" [ <!ENTITY name "xiaomug"> ]>

<class>

<student address="HONGKONG">

<name>周小星</name>

</student>

<student address="Shanghai">

<name>林晓</name>

<age>25</age>

<introduce>是一个好学生 </introduce>

<birthday>&name;</birthday>

</student>

</class>

扩展阅读

Using Entities to Include Files XML Primer

https://www.freebsd.org/doc/en_US.ISO8859-1/books/fdp-primer/xml-primer-include.html

ATTLIST Declaration

http://xmlwriter.net/xml_guide/attlist_declaration.shtml

教程

https://www.tutorialspoint.com/dtd/dtd_attributes.htm 如果本文没有使你明白 请首先参考这个链接的教程

参考

http://blog.csdn.net/gavin_john/article/details/51532756


4. XML Schema(图解,模式)

1. XML Schema Defination 简写 XSD 是 DTD Document Type Defination 的替代品 支持namespace

优点:

  • XML Schema 可针对未来的需求进行扩展
  • XML Schema 更完善,功能更强大
  • XML Schema 基于 XML 编写
  • XML Schema 支持数据类型
  • XML Schema 支持命名空间

通过对数据类型的支持:

  • 可更容易地描述允许的文档内容
  • 可更容易地验证数据的正确性
  • 可更容易地与来自数据库的数据一并工作
  • 可更容易地定义数据约束(data facets)
  • 可更容易地定义数据模型(或称数据格式)
  • 可更容易地在不同的数据类型间转换数据

<! [CDATA [文本内容]] > 在特殊的标签CDATA下,所有的标签、实体引用都被忽略,而被XML处理程

序一视同仁地当作字符数据看待。

2. 处理指令 (PI process Instruction)处理指令用来指挥解析引擎如何解析XML文档内容

处理指令必须以“<?”作为开头,以“?>”作为结尾 【看到了了没 和php的简写标签是一样的】

例如,在XML文档

中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容

3.对xsd 文件的引用

<?xml version="1.0"?> <note xmlns="http://www.w3school.com.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3school.com.cn note.xsd">

<to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don‘t forget the meeting!</body> </note>

对 DTD 的引用

<?xml version="1.0"?>

<!DOCTYPE note SYSTEM "http://www.w3school.com.cn note.dtd"> <note>

<to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don‘t forget the meeting!</body> </note>

参考:http://blog.csdn.net/erlian1992/article/details/51569678

专业术语

DTD document type defination 文档类型定义

PCDATA parsed character data 已解析字符数据

XSD xml shcema Defination XML模型定义

1.简介

xml 可扩展标记语言 Extensible Markup Language

XML的设计宗旨是传输数据,而非显示数据

  • 和html 的差异

1.xml传输数据 html 显示数据 设计的目的不一样

2. html 的标签固定 xml的标签不固定

  • xml的用处

1. 描述事物的树形结构

2.作为配置文件

3.解决数据传输不规范的情况

4. 是html 的补充 简化了数据传输,共享

5. 应用场景: HTML,WSDL,WAP,RSS,RDF,OWL,SML

xml 是纯文本

2.语法

分成文档声明,元素,属性,注释,CDATA区域,特殊字符,处理指令几块

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

<!-- 上面是声明 -->

<?xml-stylesheet type="text/css" href="xml2.css" ?>

<!-- 上面是处理指令 -->

<books>

<!-- 根 -->

<!-- comments -->

<![CDATA[contents what ever]]>

<!-- CDATA 下面一段是错误代码区-->

<book attr=‘wow‘> <!-- 属性 这些注释是错误的 -->

<name>My life</name> <!-- 元素 这些注释是错误的-->

<price>100$</price>

</author><!-- 空标签 这些注释是错误的 空标签这种也不合格 我使用simplexml_load_file函数解析xml 的时候会出错-->

<author/> <!-- 这个才是正确的写法 -->

</book>

<book>

<name>Your Life</name>

<price>101$</price>

<author>Someone</author>

</book>

</books>

上面一部分错误的xml正确写法

<book attr=‘wow‘>

<name>My life</name>

<price>100$</price>

<author/>

</book>

1. 所有标签都有关闭标签 空标签简写 也必须是</author> 这样的

2.标签大小写敏感 <author>authorname</Author> 会发生错误

3.标签必须正确嵌套

4.必须有根标签

5.属性值加引号 单双都可以

6.标签里面的内容不能包含 <,>, & [ 三个都已经测试过不行,必须转义】

< &lt;

> &gt;

& &amp;

测试代码

$file = "/Users/dingmac/Desktop/demo.xml";

$string = file_get_contents($file);

$xml = simplexml_load_file($file);

var_dump($xml);

其中有个问题在解析元素的时候 在xml 中添加了注释<!-- 我是备注 -->

在解析的时候会出现 comments 元素 so 第7点上面的代码 元素部分

7. 所有注释不能放在元素名中间,也不能嵌套

8.元素内容中的空格 会保留 包括换行符

9.声明部分有几部分组成

version 版本号

encoding 编码

standalone yes|no 表示文档定义是否独立使用

10.标签命名规则

1.不能使用xml开始的名字

2.正常程序中使用的变量名字

3.不要使用- 使用_ 特殊符号 % & 等等别用 不要用: ,. 等 使用英语 中文也行 但是别扭不?

11.xml 是可以扩展的

12.属性通过 simplexml_load_file 函数解析之后 会出现下面的内容

["@attributes"]=>

array(1) {

["attr"]=>

string(3) "wow"

}

13.属性也能提供信息但是必须加引号,but 尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息 元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素

3.xml定义要遵循 DTD

DTD document type defination 文档类型定义

参考 http://blog.csdn.net/gavin_john/article/details/51532756

基本语法



#file myclass.dtd

<! ELEMENT 元素名 类型>

可以定义自己的DTD文件 文件名 myclass.dtd

<!ELEMENT class (student+)>

<!ELEMENT student (name,age,introduce)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT introduce (#PCDATA)>



#file demo.xml

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

<!-- 上面是声明 -->

<!DOCTYPE class SYSTEM "myclass.dtd">

<!-- 使用规则 SYSTEM使用本地文件,public 使用网络文件 -->

<class>

<student>

<name>周小星</name>

<age>23</age>

<introduce>学习刻苦</introduce>

<score>99</score>

</student>

<student>

<name>林晓</name>

<age>25</age>

<introduce>是一个好学生</introduce>

<score>100</score>

</student>

</class>



php 验证函数 参考 https://stackoverflow.com/questions/101935/validate-xml-using-a-custom-dtd-in-php

引用 : Take a look at PHP‘s DOM, especially DOMDocument::schemaValidate and DOMDocument::validate.

#file xml_validate.php

<?php

$dom = new DOMDocument();

$dom->load("demo.xml");

if($dom->validate()){

echo "The DOM is validate";

}



DTD 语法

1. 文件位置

本地文件

<!DOCTYPE 根元素 SYSTEM "DTD文件路径">

网络文件

<!DOCTYPE 根元素 PUBLIC "DTD 名称" "DTD url">

比如

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

2.基本语法 <!ELEMENT 元素 内容>

- ELEMENT是关键字,是不能修改的

- NAME表示元素名称

- CONTENT是元素类型,必须要大写!CONTENT的内容有三种写法:

(1)EMPTY——表示该元素不能包含子元素和文本,但可以有属性。

(2)ANY——表示该元素可以包含任何在该DTD中定义的元素内容

(3)#PCDATA——可以包含任何字符数据,但是不能在其中包含任何子元素

EMPTY < #PCDATA <ANY

另外一点需要注意的是 元素 内容之间一定要有空格 包括下面提到的第三点

3.元素的组合类型

<!ELEMENT 元素 类型>

demo:

<!ELEMENT class (student+)> 注意这边的空格是一定要的

符号 用途 示例 示例说明
() 用来给元素分组 (古龙|金庸),(王朔|余杰) 分成两组
| 在列出的对象中选择一个 (男人|女人) 表示男人或者女人必须出现,两者至少选其一
+ 该对象必须出现一次或者多次 (成员+) 表示成员必须出现,而却可以出现多个成员
* 该对象允许出现0次或者多次 (爱好*) 爱好可以出现两次到多次
? 该对象必须出现0次或者1次 (菜鸟?) 菜鸟可以出现,也可以不出现,如果出现的话,最多只能出现一次
, 对象必须按指定的顺序出现 (西瓜,苹果,香蕉) 表示西瓜、苹果、香蕉必须出现,并且按这个顺序出现

4.定义属性

<!ATTLIST 元素

属性名称 类型 属性的特点

属性名称 类型 属性的特点

...

>

属性的类型有

1. CDATA 字符数据 任何字符

<!ATTLIST student

address CDATA #REQUIRED

>

2.ID 唯一的字符串 不能以数字开头

<!ATTLIST student

no ID #REQUIRED

>

3.IDREF/IDREFS - IDREF属性的值指向文档中其它地方声明的ID类型的值 - IDREFS同IDREF,但是可以具有由空格分开的多个引用。

<!ATTLIST student

relID ID #REQUIRED

parentID IDREFS #IMPLIED

name CDATA #REQUIRED

>

4.Enumerated 属性类型-Enumerated,事先定义好一些值,属性的值必须在所列出的值的范围内。

<!ATTLIST student

marriage (sigle|married|devorced|widowed) #IMPLIED

>

5.ENTITY/ENTITIES

我测试下来如果要使用 ENTITY 就必须使用 内嵌的DTD 方式

<!DOCTYPE 节点名称 [

<!ENTITY copyright "this is copyright">

<!ELEMENT student (name,age,instroduce)>

]>

- 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。

- 在DTD定义中,一条!ENTITY语句用于定义一个实体。

- 实体可分为两种类型:引用实体和参数实体。引用实体是被XML文档应用的,而参数实体是被DTD文件本身应用的。

1.引用实体:

引用实体主要在XML文档中被应用

语法格式如下,引用实体的定义内容最好放在DTD文件的最后。

<!ENTITY 实体名称 "实体内容">

引用方式:&实体名称; 末尾要带上分号,这个引用将直接转变成实体内容

demo

#我测试下来在dtd 文件中定义没有用只能在xml里面定义才有用

<!DOCTYPE class SYSTEM "myclass.dtd"> // 这样在myclass.dtd 文件中定义没有用

只能在xml 文件中定义

<!DOCTYPE class [

<!ENTITY copyright "I am a Copyright">

]>

<copyright> &copyright</copyright>

在xml 里面直接使用 &copyright 可以直接调用 I am a Copyright

引用 外面文件

<!ENTITY chapter.1 SYSTEM "chapter1.xml"> // 本地文件

调用的时候 &chapter.1;

2.参数实体 被DTD文件本身应用的

<!ENTITY % 实体名称 "实体内容">

应用方式

% 实体名称; 记得分好 这个可以在DTD 文件中定义

demo

dtd 文件

#myclass.dtd

<!ELEMENT class (student+)>

<!ENTITY js "Jo Smith">

<!ENTITY % TAG_NAME "name|age|introduce">

<!ATTLIST student

address CDATA #IMPLIED

>

<!ELEMENT student (%TAG_NAME;|生日)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT introduce (#PCDATA)>

<!ELEMENT 生日 (#PCDATA)>

xml 文件

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

<!-- 上面是声明 -->

<!DOCTYPE class SYSTEM "myclass.dtd">

<class>

<student address="HONGKONG">

<name>周小星</name>

<age>23</age>

<introduce>学习刻苦</introduce>

</student>

<student address="Shanghai">

<name>林晓</name>

<age>25</age>

<introduce>是一个好学生 </introduce>

</student>

</class>

验证的时候将会有如下提示

Warning: DOMDocument::validate(): Element student content does not follow the DTD, expecting (name | age | introduce | 生日), got (name age introduce ) in /Users/dingmac/Desktop/xml_validator.php on line 5

说明生效了

属性的特点有

#REQUIED 表示这个属性必须给,不给就报错

#IMPLIED 表示这个属性可以给也可以不给

#FIXED value 表示这个属性必须给一个固定的value值

Default value 表示这个属性如果没有值,就分配一个默认的value值

demo <!ATTLIST name id CDATA "0">

修改上面的myclass.dtd 文件

<!ELEMENT class (student+)>

<!ENTITY js "Jo Smith">

<!ENTITY % TAG_NAME "name|age|introduce">

<!ATTLIST student

address CDATA #IMPLIED

>

<!ELEMENT student (%TAG_NAME;|birthday)+ >

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT introduce (#PCDATA)>

<!ELEMENT birthday (#PCDATA)>

xml 如下

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

<!-- 上面是声明 -->

<!DOCTYPE class SYSTEM "myclass.dtd">

<class>

<student address="HONGKONG">

<name>周小星</name>

</student>

<student address="Shanghai">

<name>林晓</name>

<age>25</age>

<introduce>是一个好学生 </introduce>

<birthday></birthday>

</student>

</class>

是ok的

最后看到了一个蛮好的解决方案

又是文本引用 也包含我们想要的 ENTITY 引用

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

<!-- 上面是声明 -->

<!DOCTYPE class SYSTEM "myclass.dtd" [ <!ENTITY name "xiaomug"> ]>

<class>

<student address="HONGKONG">

<name>周小星</name>

</student>

<student address="Shanghai">

<name>林晓</name>

<age>25</age>

<introduce>是一个好学生 </introduce>

<birthday>&name;</birthday>

</student>

</class>

扩展阅读

Using Entities to Include Files XML Primer

https://www.freebsd.org/doc/en_US.ISO8859-1/books/fdp-primer/xml-primer-include.html

ATTLIST Declaration

http://xmlwriter.net/xml_guide/attlist_declaration.shtml

教程

https://www.tutorialspoint.com/dtd/dtd_attributes.htm 如果本文没有使你明白 请首先参考这个链接的教程

参考

http://blog.csdn.net/gavin_john/article/details/51532756


4. XML Schema(图解,模式)

这一部分正在看 之后补全

1. XML Schema Defination 简写 XSD 是 DTD Document Type Defination 的替代品 支持namespace

优点:

  • XML Schema 可针对未来的需求进行扩展
  • XML Schema 更完善,功能更强大
  • XML Schema 基于 XML 编写
  • XML Schema 支持数据类型
  • XML Schema 支持命名空间

通过对数据类型的支持:

  • 可更容易地描述允许的文档内容
  • 可更容易地验证数据的正确性
  • 可更容易地与来自数据库的数据一并工作
  • 可更容易地定义数据约束(data facets)
  • 可更容易地定义数据模型(或称数据格式)
  • 可更容易地在不同的数据类型间转换数据

<! [CDATA [文本内容]] > 在特殊的标签CDATA下,所有的标签、实体引用都被忽略,而被XML处理程

序一视同仁地当作字符数据看待。

2. 处理指令 (PI process Instruction)处理指令用来指挥解析引擎如何解析XML文档内容

处理指令必须以“<?”作为开头,以“?>”作为结尾 【看到了了没 和php的简写标签是一样的】

例如,在XML文档

中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容

3.对xsd 文件的引用

<?xml version="1.0"?> <note xmlns="http://www.w3school.com.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3school.com.cn note.xsd">

<to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don‘t forget the meeting!</body> </note>

对 DTD 的引用

<?xml version="1.0"?>

<!DOCTYPE note SYSTEM "http://www.w3school.com.cn note.dtd"> <note>

<to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don‘t forget the meeting!</body> </note>

时间: 2024-10-05 20:15:18

xml 深入学习的相关文章

XML之学习笔记

参考:http://www.w3school.com.cn/xml/index.asp中的 树结构.语法.元素.属性.验证.命名空间.编码 目的:理解Android开发中的.xml文件是怎样的 XML代码均摘自ADT(Android Development Tools),讲述如有谬误,敬请指正. XML规定:区分大小写.必须有根元素.标签打开了就要关闭 一.元素 开始标签到结束标签的部分,特定类型的一个事物 <.../>不允许有子元素, 即叶节点 <...>...<.../&

由XML解析学习工厂模式

代码段1: startupData = new StartupData(); /* 设定自定义的MyHandler给XMLReader */ StartupXMLHandler startupDataXMLHandler = new StartupXMLHandler(); startupDataXMLHandler.setData(startupData); /* 产生SAXParser对象 */            SAXParserFactory spf = SAXParserFacto

PHP操作XML文件学习笔记

原文:PHP操作XML文件学习笔记 XML文件属于标签语言,可以通过自定义标签存储数据,其主要作用也是作为存储数据. 对于XML的操作包括遍历,生成,修改,删除等其他类似的操作.PHP对于XML的操作方式很多,这次学习的是通过DOMDocument进行操作,其他的操作方法可以参考 http://www.oschina.net/code/snippet_110138_4727 1.对XML文件的遍历 通过DOMDocument对于XML文件的操作的方法:首先要实例化一个DOMDocument类的对

XML简单学习

XML简单概述 1.Extensible Markup language可扩展标记语言; 2.作用:具有层次性的描述有关系的数据: 体现在:描述数据关系:软件配置,以描述程序模块之间的关系: 语法介绍 1.文档声明: <?xml version="1.0" encoding="utf-8" ?> 注意编码的统一性 储存在内存中的编码格式,与解析器打开的两者统一 2.元素:element 成对标签 <label>pcdata</lable

xml基础学习笔记05

Xpath快速解析 如题一样,本篇主要说说Xpath快速查找XML文档 * Xpatn.Xquery,是专门用来查询xml的语言 * 查询xml非常快 Xpatn.Xquery,是专门用来查询xml的语言 查询xml非常快 下面主要记录一下w2school 上面学习的笔记 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 路径表达式 XPath 使用路径表达式来选取 XML 文档中的节点或者节点集.这些路径表达式和我们在常

Android] Android XML解析学习——方式比较

[Android] Android XML解析学习——方式比较 (ZT) 分类: 嵌入式 (From:http://blog.csdn.net/ichliebephone/article/details/5981913) 一.基础知识 经过这段时间的学习,我们已经了解了Android平台上用于解析XML的三种方式:SAX.DOM和Pull.并且在学习的过程中也介绍了这三种方式各自的特点及适合的使用场合,简单的来说,DOM方式最直观和容易理解,但是只适合XML文档较小的时候使用,而SAX方式更适合

XML语言学习随笔

XML和HTML都是W3C的定制的标准,XML的诞生本身是为了替代不成熟的HTML,但是因为现实的环境,XML替代HTML并未成功.之后W3C为了代码严谨性的决心,又发布了升级版的标记语言XHTML,但是依然因为显示环境的主要原因,未能成功推广,知道今天HTML5的诞生! XML简单的特点 1. 比HTML更加规范严谨 2.具备树状格式 3.具有层次感 XML的组成 1.文档声明 2.元素 3.属性 4.注释 5.CDATA区 6.特殊字符 7.处理命令 文档声明 在XML中必须存在文档声明,否

【代码笔记】XML深入学习:DTD约束与DTD语法(1)

2015-12-27 文件名    student.xml 1 <?xml version="1.0" encoding="GB2312" standalone="no"?> 2 <!--大家好,我是注释--> 3 <!--2015.12.27--> 4 <!DOCTYPE students SYSTEM "student.dtd"> 5 <!--这里没写盘符,及表示当前目

xml基础学习笔记03

继续上篇xml学习笔记,坚持.坚持.再坚持啊.... 本篇主要记录: 35.XML节点的删除与修改 36集.用XML制作RSS订阅源 1 <?php 2 3 /* 4 笔记: 5 35.XML节点的删除与修改 6 使用的xml文件是这样的 7 <?xml version='1.0' encoding='utf-8' ?> 8 <bookstore> 9 <book> 10 <title>路遥-平凡的世界</title> 11 <pri