XML&DTD

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

XML:ExtensibleMarkupLanguage,可扩展标记语言@H_404_3@@H_404_3@

@H_404_3@

特点:@H_404_3@@H_404_3@

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

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

@H_404_3@

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

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

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

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

@H_404_3@

@H_404_3@

哪些场合容易见到XML?@H_404_3@@H_404_3@

交换数据或传输数据时@H_404_3@

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

@H_404_3@

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

@H_404_3@

用来做配置文件@H_404_3@


@H_404_3@XML的语法规范@H_404_3@@H_404_3@

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

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

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

DTD声明@H_404_3@[@H_404_3@可选@H_404_3@]@H_404_3@@H_404_3@

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

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

@H_404_3@

1.1元素的语法规范@H_404_3@@H_404_3@

标签必须闭合@H_404_3@

标签不允许相互嵌套@H_404_3@

标签名称区分大小写@H_404_3@

标签的闭合@H_404_3@

1.2属性的语法规范@H_404_3@@H_404_3@

属性必有值@H_404_3@

属性值必用引号包起来@H_404_3@

1.3特殊字符与实体@H_404_3@@H_404_3@

XML@H_404_3@里@H_404_3@,@H_404_3@与@H_404_3@xhtml@H_404_3@里@H_404_3@,@H_404_3@对于实体的概念是一样的@H_404_3@,@H_404_3@@H_404_3@

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

@H_404_3@

1.4注释的语法@H_404_3@@H_404_3@

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

注释内部不要出现--@H_404_3@@H_404_3@

注释不能嵌套@H_404_3@

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

@H_404_3@

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

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

@H_404_3@

@H_404_3@

@H_404_3@

DTD用法@H_404_3@@H_404_3@

documenttypedefinition:文档类型定义@H_404_3@@H_404_3@

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

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

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

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

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

@H_404_3@

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

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

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

@H_404_3@

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


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

2.0:DTD的基本写法@H_404_3@@H_404_3@

<!DOCTYPE根节点名称@H_404_3@[@H_404_3@@H_404_3@

]>@H_404_3@

@H_404_3@

2.1DTD如何规范@H_404_3@XML@H_404_3@的元素@H_404_3@?@H_404_3@@H_404_3@

:@H_404_3@@H_404_3@

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

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

规范形式2:(#PCDATA)@H_404_3@@H_404_3@

规范形式3:EMPTY@H_404_3@@H_404_3@

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

@H_404_3@

2.2DTD如何规范属性@H_404_3@@H_404_3@

属性="@H_404_3@属性值@H_404_3@"@H_404_3@@H_404_3@

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

<!ATTLIST元素名称@H_404_3@@H_404_3@

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

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

>@H_404_3@

属性类型:@H_404_3@@H_404_3@

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

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

CDATA(文本@H_404_3@)@H_404_3@@H_404_3@

Enumerated(枚举类型@H_404_3@)@H_404_3@@H_404_3@

@H_404_3@

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

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

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

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

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

@H_404_3@

@H_404_3@

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

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

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

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

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

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


@H_404_3@2.3用@H_404_3@DTD@H_404_3@规范@H_404_3@XML@H_404_3@的实体@H_404_3@@H_404_3@

1实体声明@H_404_3@@H_404_3@

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

2:引用实体@H_404_3@@H_404_3@

&实体名@H_404_3@;@H_404_3@@H_404_3@

@H_404_3@

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

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

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

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

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

?,是修饰元素个数@H_404_3@,@H_404_3@代表@H_404_3@0@H_404_3@或@H_404_3@1@H_404_3@个@H_404_3@@H_404_3@

|,A|B|C,从@H_404_3@A,B,C@H_404_3@任取一个@H_404_3@@H_404_3@

@H_404_3@

3.@H_404_3@如何生成和解析XML@H_404_3@@H_404_3@

通过PHP@H_404_3@的@H_404_3@DOM@H_404_3@操作来生成和解析@H_404_3@XML@H_404_3@@H_404_3@

@H_404_3@

3.1,如何实例化@H_404_3@DOM@H_404_3@操作类@H_404_3@@H_404_3@

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

@H_404_3@

3.2如何载入@H_404_3@XML@H_404_3@文档@H_404_3@@H_404_3@

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

@H_404_3@

3.3:如果查询节点@H_404_3@?@H_404_3@@H_404_3@

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

:$dom->getElementById('ID@H_404_3@值@H_404_3@');@H_404_3@@H_404_3@

@H_404_3@

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

$node->childNodes属性就可读到@H_404_3@@H_404_3@

@H_404_3@

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

$dom->getElementsByTagName('标签名@H_404_3@');@H_404_3@@H_404_3@

@H_404_3@

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

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

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

@H_404_3@

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

$node->nodeValue就可以@H_404_3@@H_404_3@

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

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


@H_404_3@3.4PHPDOM创建@H_404_3@XML@H_404_3@@H_404_3@

3.4.1创建节点@H_404_3@@H_404_3@

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

@H_404_3@

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

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


@H_404_3@3.4.2:如何创建属性节点@H_404_3@?@H_404_3@@H_404_3@

$node->setAttribute('属性名@H_404_3@','@H_404_3@属性值@H_404_3@');@H_404_3@@H_404_3@

@H_404_3@

3.4.3如何创建@H_404_3@CDATA@H_404_3@节@H_404_3@@H_404_3@

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

@H_404_3@

@H_404_3@

3.4.4:如何添加子节点@H_404_3@@H_404_3@

$node->appendChild(子节点@H_404_3@);@H_404_3@@H_404_3@

@H_404_3@

@H_404_3@

3.5如何删除子节点@H_404_3@,@H_404_3@@H_404_3@

父节点->removeChild(@H_404_3@子节点@H_404_3@)@H_404_3@@H_404_3@

@H_404_3@

3.6:如何修改子节点@H_404_3@@H_404_3@

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

@H_404_3@

@H_404_3@

@H_404_3@

XPATH,Xquery@H_404_3@

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

XPATH,的基本写法@H_404_3@@H_404_3@

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

1例@H_404_3@:@H_404_3@逐层定位@H_404_3@@H_404_3@

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

@H_404_3@

2:任意层次定位@H_404_3@@H_404_3@

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

@H_404_3@

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

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

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

@H_404_3@

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

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

:<word><name>value</name></word>@H_404_3@@H_404_3@

@H_404_3@

@H_404_3@


@H_404_3@讨论@H_404_3@

<bookid="boo1">@H_404_3@

</book>@H_404_3@

@H_404_3@

<book>@H_404_3@

<id>b001</id>@H_404_3@

</book>@H_404_3@

@H_404_3@

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

@H_404_3@

商品表为例:@H_404_3@@H_404_3@

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

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

@H_404_3@

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

@H_404_3@

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

@H_404_3@

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

猜你在找的XML相关文章