XML&DTD
XML:ExtensibleMarkupLanguage,可扩展标记语言
特点: 比起html来,html是显示/样式与数据不分离, 而xml呢,只显示纯数据,和样式无关.
Html的标签,a,br,p,div,span等等 Html的标签是固定的,而xml的标签呢,是自定义的.(自描述性) 往往定义的时候,是要体现内容的一个简单描述, 因此,我们说XML具有自描述性.
哪些场合容易见到XML? 交换数据或传输数据时 比如公共查询接口,例如豆瓣的书评查询,google的天气查询
或者存储数据时,可以当做小型数据库用[在线词典]
用来做配置文件
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的解析和测试
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)
1实体声明 <!ENTITY实体名"实体值"> 2:引用实体 &实体名;
2.4在对元素的声明中,修饰符的作用 ()包在子元素外面,把子元素合成组 ,夹在子元素名称之间,限制子元素的顺序 +,是修饰元素的"个数"用的,+代表1->N个, *,是修改元素个数,代表0->N个 ?,是修饰元素个数,代表0或1个 |,A|B|C,从A,B,C任取一个
3.如何生成和解析XML 通过PHP的DOM操作来生成和解析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.4.1创建节点 $xmldom->createElement('节点名'[,节点的文本内容]),
例:->createElement('app','内容');---><app>内容</app> ->crateELement('app')----><app></app>
$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,并且word的name属性的值是'value' 例:<wordname="value"></word>
//用条件查询,按子元素的值做条件 /cetsix/word[name="value"],并且word的name子元素的值是'value' 例:<word><name>value</name></word>
<bookid="boo1"> </book>
<book> <id>b001</id> </book>
什么时间用属性?什么时间用元素?
商品表为例: 商品名,商品价格,库存--->这些信息商品固有的信息. 每一行商品,又加了"id"信息,
这个id信息,原本没有,因为商品信息太多,为管理/区别商品的固有信息,另加的id.
这个id,是'关于信息的信息',--->"元信息"
一般而言,元信息,适合用属性,实体信息适合用子元素, (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |