一、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、實體引用:<,>,&,",&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;©right;</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);