xml笔记
xml: 有且只有一个根元素 默认utf-8 如果是中文且为不是utf-8的必须指定编码 声明的编码必须和文档的内容保持一致 well-formed XML :是否符合xml语法 valid xml:验证此xml是否符合dtd规则 dtd定义了哪些: 1.元素定义规则,只能有哪些标签 2.元素间关系的的定义,标签出现的顺序,位置 3.使用的实体或符号规则 < © //行内dtd写法 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root[ <!ELEMENT root EMPTY> ]> <root></root> //外部dtd写法 ,对于公共dtd如果浏览器能识别名称,则不会在去请求dtd文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root SYSTEM "test.dtd"> <root /> //test.dtd <!ELEMENT root EMPTY> PCDATA:解析 CDATA:不解析,这样就可以不用在乎里面的特殊字符 元素声明使用<!ELEMENT 元素名称 (元素内容)>或<!ELEMENT 元素名称 类别>的语法<!ELEMENT root EMPTY> //EMPTY关键字表示元素是个空元素 <!ELEMENT root ANY> //ANY关键字表示元素中可以出现任何内容,也可以为空 //下面这个声明表示root中可以有文本,也可以是空 <!ELEMENT root (#PCDATA)> //()表示一个分组,其中是放的允许在元素出现的内容,#PCDATA表示文本 <!ELEMENT root (child)> //child是子元素的名称,这个声明表示root中必须且只能有一个child元素 <!ELEMENT root (child1,child2)> //以逗号分隔,表示子元素依次出现 <!ELEMENT root (child1|child2)> //竖线与"OR"的意思相近,表示root元素中只能出现child1或child2 <!ELEMENT root (child?)> //root中child子元素可以出现一次,也可以不出现 <!ELEMENT root (child+)> //root中child子元素至少出现一次 <!ELEMENT root (child*)> //root中child子元素可以出现任意次数或不出现 <!ELEMENT root (child,(a,b))> //()还可以嵌套,这里表示root元素中第一次子元素必须是child //紧接着是a或b <!ELEMENT root (child,(a,b)+)> //*,?,+这些量词可作用于分组,这里表示root元素中第一次子元素必须是child //紧接着是a或b出现一次或多次 属性声明使用<!ATTLIST 元素名称 属性名称 属性类型 默认值>的语法.示例如下: 类型 描述 CDATA 值为字符数据 (character data) (en1|en2|..) 此值是枚举列表中的一个值 ID 值为唯一的 id IDREF 值为另外一个元素的 id IDREFS 值为其他 id 的列表 NMTOKEN 值为合法的 XML 名称 NMTOKENS 值为合法的 XML 名称的列表 ENTITY 值是一个实体 ENTITIES 值是一个实体列表 NOTATION 此值是符号的名称 xml: 值是一个预定义的 XML 值 值 属性的默认值.该属性可以出现,也可以不出现,当没有明确指定该属性时,属性值使用默认值 #REQUIRED 属性值是必需的 #IMPLIED 属性不是必需的,可以出现,可以不出现 #FIXED value 属性值是固定的.属性可有可无,但有的时候,其值必须是value <!ATTLIST img src CDATA #REQUIRED> //img元素的src属性是必须的,值为字符串 <!ATTLIST script type CDATA "text/javascript"> //script元素的type属性默认值是text/javascript <!ATTLIST div id ID #IMPLIED> //div元素的id属性是唯一的ID标识,可有可无 <!ATTLIST input type(text|radio|checkbox) "text"> //input元素的type属性是三个值中的一个,默认值是text <!ATTLIST label for IDREF #IMPLIED> //label元素的for属性是页面中另一个元素的ID 实体的定义: //一般实体定义 <!ENTITY abc "ABCabcABC"> //内部实体 <!ENTITY abc SYSTEM "abc.ent"> //外部私有实体 <!ENTITY test PUBLIC "-//AjaxLife//ENTITIES TEST 1 for XML//EN" "test.ent"> //外部公共实体 //实体引用 <abc>&abc;</abc> //参数实体 只在dtd文件中用 <!ENTITY % abc "root"> <!ELEMENT %abc; (child)>//这句将声明元素root,具有一个子元素child xml中引入样式表:<?xml-stylesheet type="text/css" href="http://test.cm/test.css"?> <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/css" href="http://test.cm/test.css"?> <!DOCTYPE root [ <!ELEMENT root ANY> <!ELEMENT node ANY> <!ATTLIST node name (a|b|c) 'a' age CDATA '24' id ID #IMPLIED for IDREF 'f' fors IDREFS 'a' > <!ENTITY sjk "songjiankang"> ]> <root> <node id="f"></node> <node id="a"></node> <node for="a"></node> <node fors="a f">&sjk;</node> </root> xpath: body//p 后代元素 body/p 子元素 /root {选取root root {选取root child {空,因为child不是document的子元素 //child {选取两个child元素,//表示后代 //@attr {选取attr属性节点 /root/child//desc {返回child的后代元素desc /root/child[3] {选取root元素的第三个child子元素,注意,这和数组下标不一样,从1开始计数 //child[@attr] {选取所有具有属性attr的child元素 //child[@attr="val"]/desc {选取所有属性attr的值为val的child元素的子元素desc //child[desc] {选取所有的有desc子元素的child //child[position()>3] {position()是XPath中的一个函数,表示节点的位置 //child[@attr>12] {XPath表达式还可以进行数值比较,该表达式将选取attr属性值大于12的child元素 //child[last()] {last()函数返回节点列表最后的位置,该表达式将选取最后一个child元素 * ,和CSS中的选择符一样,这将匹配任何元素节点 @* ,匹配任何属性节点 node() ,匹配任何类型的节点 /root/* {选取根元素下面的所有子元素 /root/node() {选取根元素下面的所有节点,包括文本节点 //* {选取文档中所有元素 //child[@*] {选取所有具有属性的child元素 //@* {选取所有的属性节点 xsl 扩展样式表语言(extensible stylesheet language)包括: