Xpath,XQuery,DTD

覆手為雲p發表於2018-05-21

一、Xpath

XPath 是一門在 XML 文件中查詢資訊的語言;XPath 是 XSLT 中的主要元素。XPath是W3C標準。
1、七種型別節點:元素、屬性、文字、名稱空間、處理指令、註釋、文件節點;
2、節點關係(軸)

    parent               當前節點的父節點;
    child                當前節點的所有子節點;
    ancestor             當前節點的所有上級節點(父、祖父...);
    ancestor-or-self     當前節點的所有上級節點及節點本身;
    descendant           當前節點的所有下級節點(子、孫...);
    descendant-or-self   當前節點的所有下級節點及本身;
    preceding-sibling    當前節點之前的所有同級節點;
    following-sibling    當前節點之後的所有同級節點;
    following            當前節點之後的所有節點;
    preceding            當前節點之前的所有節點;
    namespace            當前節點的所有名稱空間節點;
    attribute            當前節點的所有屬性;
    self                 當前節點;   

3、選取節點方法:

    nodeName         選擇此節點的所有子節點;
    /                從根節點選取;
    //               從匹配選擇當前節點選擇文件中的節點,而不考慮它們的位置;
    .                選取當前節點;
    ..               選取節點的父節點;
    @                選取屬性;
    *                匹配任何元素節點;
    @*               匹配任何屬性節點;
    node()           匹配任何型別的節點;
    name1|name2      選取所有name2和name1元素;

4、謂語

用來查詢某個特定節點或者包含某個指定的值的節點,謂語被包含在方括號中;例:

    nodeName[1]            選取nodeName的第一個元素;
    nodeName[last()]      選取最後一個元素;
    nodeName[position()<3] 選取前兩個元素;
    nodeName[@lang]        選擇屬性有lang的nodename元素;
    nodeName[@lang='eng']  選擇屬性lang的值為eng的元素;
    nodeName[price>30]     選取所有其中price元素大於30的nodeName元素;

5運算子:

+,-,*,div(除),mod(取餘),=,!=,<,<=,>,>=,or,and

 

二、XQuery

1、XQuery 之於 XML 作用就類似於 SQL 之於資料庫的作用,是用來查詢XML資料,可以用來查詢任何XML形態呈現的資料(包括資料庫)
2、XQuery使用謂語來限定從文件所提取的資料;
3、XQuery對大小寫敏感,其中的字串可使用單引號或雙引號;
4、變數由$並跟隨一個名稱來進行定義;
5、 :註釋:
6、通用比較:=,!=,<,<=,>,>=;    
    值的比較:eq,ne,lt,le,gt,ge
7、doc("name.xml")        使用此函式來提取XML文件中的資料;    
    查詢示例:doc("books.xml")/bookstore/book[price>30]/title      選取bookstore元素下所有的title元素,且price元素值大於30;
    使用FLWOR進行排序(for  let  where  order by  return):
    for $x in doc("books.xml")/bookstore/book
    where $x/price>30
    order by $x/title
    return $x/title    
8、使用data()函式來將獲取到的資料展示出來
    向html元素插入查詢到的元素示例:

    <ul>
        {
        for $x in doc("books.xml")/bookstore/book
        order by $x/title
        return <li>{data($x/title)}. Category: {data($x/@category)}</li>
        }
    </ul>

9、自建函式格式
    declare function 字首:name($para as datatype)
    AS 返回資料型別
    {    }

 

三、DTD

1、DTD(文件型別定義)的作用是定義 XML 文件的合法構建模組,可被宣告於XML文件中,也可作為一個外部引用;
2、所有XML文件構成的模組:元素、屬性、實體、PCDATA、CDATA
3、實體引用:&lt,&gt,&amp,&quot,&apos
4、元素宣告:

    <!ELEMENT element-name category>    或    <!ELEMENT element-name (element-content)>
    <!ELEMENT element-name EMPTY>       空元素
    <!ELEMENT element-name(#PCDATA)>    只有PCDA他的元素
    <!ELEMENT element-name ANY)>        帶有任何內容的元素
    <!ELEMENT element-name (childname1,...)>        帶有子元素的元素
    <!ELEMENT element-name (childname+)>            子元素最少出現一次
    <!ELEMENT element-name (childname*)>            子元素出現一次或多次
    <!ELEMENT element-name (childname?)>            子元素出現0次或一次
    <!ELEMENT element-name (childname1|childname2)> 或

5、屬性宣告
    <!ATTLIST element-name attribute-name attribute-type attribute-value>
    屬性型別(attribute-type):

    CDATA            字元資料
    (va1|va2|...)    列舉
    ID               唯一的ID
    IDREF            值為另一個元素的ID
    IDREFS           值為ID的列表
    NMTOKEN          合法的XML名稱
    NMTOKENS         合法的XML名稱列表
    ENTITY           實體
    ENTITYS          實體列表
    NOTATION         符號的名稱
    xml:             值是一個預定義的XML值

    屬性值(attribute-value):

    一個值            給定的預設值
    #REQUIRED        必填
    #IMPLIED        非必填
    #FIXED value    屬性值是固定的

6、實體(用於定義引用普通文字或特殊字元的的快捷方式的變數,實體引用是對實體的引用)
    實體可在內部和外部宣告

    <!ENTITY entity-name "entity-value">    內部宣告
    <!ENTITY entity-name SYSTEM "URL">        外部宣告
    示例:
    DTD
    <!ENTITY writer "This is a writer">
    <!ENTITY copyright "I do not care what it is">
    XML例項:
    <author>&writer;&copyright;</author>

7、驗證(javascript)
    示例:

    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async="false";
    xmlDoc.validateOnParse="true";    //值設為false就可以關閉驗證
    xmlDoc.load("note_dtd_error.xml");

    document.write("<br />Error Code: ");
    document.write(xmlDoc.parseError.errorCode);
    document.write("<br />Error Reason: ");
    document.write(xmlDoc.parseError.reason);
    document.write("<br />Error Line: ");
    document.write(xmlDoc.parseError.line);