XML&DTD

前端之家收集整理的这篇文章主要介绍了XML&DTD前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

XML:ExtensibleMarkupLanguage,可扩展标记语言

特点:

比起html,html显示/样式与数据不分离,

xml,显示纯数据,和样式无关.

Html标签,a,br,p,div,span等等

Html标签是固定的,xml标签,自定义.(自描述性)

往往定义的时候,是要体现内容的一个简单描述,

因此,我们说XML具有自描述性.

哪些场合容易见到XML?

交换数据或传输数据时

比如公共查询接口,例如豆瓣的书评查询,google的天气查询

或者存储数据时,可以当做小型数据库[在线词典]

用来做配置文件


XML的语法规范

1:基本的XML可以分成3部分

文档声明[可选,但是强烈建议加上,并设置编码为utf-8]

:<?xmlversion="1.0"encoding="utf-8"?>,version只能选1.0

DTD声明[可选]

根结点:最顶层的元素,包含其他所有元素/结点的根结点.

根结点必须有,且只能有一个.

1.1元素的语法规范

标签必须闭合

标签不允许相互嵌套

标签名称区分大小写

标签的闭合

1.2属性的语法规范

属性必有值

属性值必用引号包起来

1.3特殊字符与实体

XML,xhtml,对于实体的概念是一样的,

对于&,>,<',"要用实体来代替,&><"'

1.4注释的语法

注释写在<!--注释写在这里-->

注释内部不要出现--

注释不能嵌套

注释可以除了标记以内的任何地方写

1.5CDATA,characterdata的缩写,一大段字符数据

对于CDATA,原样输出,不用实体代替.

DTD用法

documenttypedefinition:文档类型定义

节点下面可以子节点,子节点又可以有子节点,子节点的名称可能无限种可能.

能否对XML的节点的名称,个数,类型等做一个限制?

:可以,DTD就是用来规范节点的名称,类型.

可以理解XML文档的"说明书".

XML文档的结构必须符合此说明书

XML是一种通用的规范,只要满足该规范都能够来解析XML文档,

Javascript,ActionScript,PHP,java,都有解析XML功能或库.

Ff,IE也能来解析XML,但是用的不相同的引擎.

IE来帮我们进行XML的解析和测试


DTD可以用来规范XML的元素,属性,实体

2.0:DTD的基本写法

<!DOCTYPE根节点名称[

]>

2.1DTD如何规范XML的元素?

:

<!ELEMENT结点名称结点规范>,结点规范的4种形式,见下:

规范形式1:(子节点1,子节点2,子节点3....子节点N),规范的是子节点的名称

规范形式2:(#PCDATA)

规范形式3:EMPTY

规范形式4ANY,如果是ANY,则结点可以是空结点,可以文本结点,也可以是多层子节点,但是,如果是多层子节点,依然是要对子节点做说明.

2.2DTD如何规范属性

属性="属性"

属性是否必须有?是否唯一?是否只能选某几个可能值之一?是否有默认值?

<!ATTLIST元素名称

属性1名称属性类型属性特点

属性2名称属性类型属性特点

>

属性类型:

ID---->如果属性ID类型,属性的值必须唯一

IDREF/IDREFS--->这个属性的值必是文档内某个ID属性的值

CDATA(文本)

Enumerated(枚举类型)

属性特点------------------------------>典型写法

#required:要求属性必须有-->#required

#IMPLIED:属性可有可没有--->#IMPLIED

#FIXED:属性值是固定的--->#FIXED"固定值"

Default_value:默认值------>"默认值"

属性类型----------------------------->典型写法

ID:要求该属性值必须是唯一的-------->ID

CDATA:属性值为普通字符串---------->CDATA

IDREF:属性值必为ID类型属性的一个值---->IDREF

IDREFS:属性ID类型属性的一个,或多个值---->IDREFS,多个值用空格隔开

Enumerated:属性的值改为以下几个之一,---------->(1|2|3|N)


2.3DTD规范XML的实体

1实体声明

<!ENTITY实体名"实体值">

2:引用实体

&实体名;

2.4在对元素的声明中,修饰符的作用

()包在子元素外面,把子元素合成组

,夹在子元素名称之间,限制子元素的顺序

+,是修饰元素的"个数"用的,+代表1->N,

*,修改元素个数,代表0->N

?,是修饰元素个数,代表01

|,A|B|C,A,B,C任取一个

3.如何生成和解析XML

通过PHPDOM操作来生成和解析XML

3.1,如何实例化DOM操作类

:$dom=newDOMDocument(1.0,'utf-8');

3.2如何载入XML文档

:$dom->load('xml-path');

3.3:如果查询节点?

3.3.1根据id查询具体节点,(要求DTD中已声明为ID属性)

:$dom->getElementById('ID');

3.3.2根据已查到的节点,查其子节点,返回的是"列表对象"

$node->childNodes属性就可读到

3.3.3根据标签名来查询节点列表,返回值是一个"列表对象"

$dom->getElementsByTagName('标签');

3.3.4根据节点列表对象,查询列表中的任意一个子节点.

$list->length属性可以读出子节点的数量

$list->item(index),读取列表中第index个节点来

3.3.5查到节点后,又如何读取节点的值

$node->nodeValue就可以

3.3.6查到节点后,又如何读取属性的值

$node->getAttribute(属性);//读到属性的值


3.4PHPDOM创建XML

3.4.1创建节点

$xmldom->createElement('节点名'[,节点的文本内容]),

:->createElement('app','内容');---><app>内容</app>

->crateELement('app')----><app></app>


3.4.2:如何创建属性节点?

$node->setAttribute('属性','属性');

3.4.3如何创建CDATA

$dom->createCDATASection('内容');

3.4.4:如何添加子节点

$node->appendChild(子节点);

3.5如何删除子节点,

父节点->removeChild(子节点)

3.6:如何修改子节点

父节点->replaceChild(新子节点,旧子节点)

XPATH,Xquery

宇宙霹雳无敌光速查询技术xpath

XPATH,的基本写法

从根节点,通过节点的层次来定位.

1:逐层定位

/cetsix/word/name-->找根节点下->word->所有name节点,注意:节点层次必须紧挨着.

2:任意层次定位

//name,找任意层次的,name节点

//用条件查询,属性作条件

/cetsix/word[@name="value"],cetsix下的word,并且wordname属性的值是'value'

:<wordname="value"></word>

//用条件查询,按子元素的值做条件

/cetsix/word[name="value"],并且wordname子元素的值是'value'

:<word><name>value</name></word>


讨论

<bookid="boo1">

</book>

<book>

<id>b001</id>

</book>

什么时间用属性?什么时间用元素?

商品表为例:

商品名,商品价格,库存--->这些信息商品固有的信息.

每一行商品,又加了"id"信息,

这个id信息,原本没有,因为商品信息太多,为管理/区别商品的固有信息,另加的id.

这个id,'关于信息的信息',--->"元信息"

一般而言,元信息,适合用属性,实体信息适合用子元素,

原文链接:https://www.f2er.com/xml/298257.html

猜你在找的XML相关文章