C语言 c++ php mysql nginx linux lnmp lamp lanmp memcache redis 面试 笔记 ppt 设计模式 问题 远程连接

xml xpath dta笔记

 

xml:
    有且只有一个根元素
    默认utf-8 如果是中文且为不是utf-8的必须指定编码
    声明的编码必须和文档的内容保持一致
    well-formed XML :是否符合xml语法
    valid xml:验证此xml是否符合dtd规则
    
dtd定义了哪些:
        1.元素定义规则,只能有哪些标签
        2.元素间关系的的定义,标签出现的顺序,位置
        3.使用的实体或符号规则 &lt &copy
        
//行内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:扩展样式表语言,主要用来对xml文档进行格式化
  包括:1.xslt:将一个xml文件转换成另一种格式的xml文件或xhtml文件
    2.xpath
    3.xsl-fo 用来格式化xml

 

 

 

posted on 2013-08-20 21:18  思齐_  阅读(358)  评论(0编辑  收藏  举报