XSL樣式表 xPath學習

2021-04-01 18:26:56 字數 4593 閱讀 8522

test1.xml:

<?xml version="1.0" encoding="utf-8"?>

<?xml:stylesheet type="text/xsl" href="test3.xsl"?>

1231.23

4564.56

789.789

0120.12

3453.45

6.78678

9019.01

234.234

test1.xsl:

[preceding::root/e2/]

[following::root/e2/]

[preceding-sibling::root/e2/]

[following-sibling::root/e2/]

[descendant::root/e2/]

[ancestor::root/e2/]

[descendant-or-self::root/e2/]

[ancestor-or-self:root/e2/]

[parent::root/e2/]

[child::root/e2/]

[self::root/e2/]

結果:下圖中的代表textnode()。因為node()方法包含所有型別的節點。因此使用該方法時應該留意對型別進行過濾。

[preceding::root/e2/] [xml:stylesheet] [e1] [e1-1] [e1-1-1] [e1-2]

[following::root/e2/] [e3] [e3-1] [e3-1-1] [e3-1-2] [e3-1-2-1] [e3-2] [e3-2-1]

[preceding-sibling::root/e2/] [e1]

[following-sibling::root/e2/] [e3]

[descendant::root/e2/] [e2-1] [e2-2] [e2-2-1] [e2-3]

[ancestor::root/e2/] [root]

[descendant-or-self::root/e2/] [e2] [e2-1] [e2-2] [e2-2-1] [e2-3]

[ancestor-or-self:root/e2/] [root] [e2]

[parent::root/e2/] [root]

[child::root/e2/] [e2-1] [e2-2] [e2-3]

[self::root/e2/] [e2]

test2.xsl:

[root/e2/e2-1][ceiling(

)=][root/e2/e2-2/e2-2-1][floor(

)=][root/e1/e1-1-1 + root/e3/e3-1-1][+=

][root/e2/e2-2/e2-2-1][round()=]

[root/e2 counts of descendants]

[count(nodes)=

][count(elements)=

][count(texts)=

][root/e2][number(text())=

][number(boolean(text()))=

][number(string(text()))=

]結果:這一部分測試xpath中數值函式的運用,幾點結論:

一、當任意型別之間用+相加時,相加之前元素會先轉換為number型別。

二、形如0120.12這樣以零開頭的字串,轉換成number型時不會報錯。

三、可以用boolean(local-name())和boolean(text())的方式過濾節點型別。

四、對於不含textnode的元素或父元素,number()並不將其轉換為0,而是轉換為nan。對於這些節點,可以用number(boolean(text())的方式轉換為。

[root/e2/e2-1][ceiling( 789.789 )=790]

[root/e2/e2-2/e2-2-1][floor( 0120.12 )=120]

[root/e1/e1-1-1 + root/e3/e3-1-1][ 1231.23 + 6.78678 = 1238.01678]

[root/e2/e2-2/e2-2-1][round( 0120.12 )= 120]

[root/e2 counts of descendants] [count(nodes)= 7] [count(elements)= 4] [count(texts)= 3]

[root/e2][number(text())= nan] [number(boolean(text()))= 0] [number(string(text()))= nan]

test3.xsl:

[root/e2][starts-with(

,'01')=

][root/e2][starts-with(normalize-space(

),'01')=

][starts-with(number(

),'1')=

][root/e2][starts-with(

0120.12,01)=

][starts-with(

'0120.12','01')=

][starts-with(

0120.12,1)=

][starts-with(

0120.12,00001)=

][starts-with(string(

),'345')=

][starts-with(number(

),'345')=

][starts-with(

,'e')=

]結果:這一部分測試字串函式,幾點結論:

一、在使用字串函式時,如果引數是節點或節點集要小心地處理空白,否則會產生令你嗔目結舌的結果。很多人習慣在xml檔案的編輯軟體如ue等中設定將tab轉換為空白,應記得先呼叫normalize-space()函式去掉不需要的空白。

二、但字串函式的引數不是節點或節點集而需要型別轉換時,xsl是依照boolean->number->string的次序進行轉換的。

所以對於下圖中的0120.12實際上先被轉換成120.12,然後被轉換成'120.12',00001先轉換成1,然後被轉換成'1'。

三、substring()以1為頭乙個字元的索引值

四、translate()函式提供了一種高效、便捷地替換字元的方法,為了達到預定效果,應確保該函式的第二個和第三個引數的字元長度總是相等,因為長度不一時,較長引數的多餘字元將被自動截掉。

[root/e2][starts-with( 0120.12 ,'01')= false] [root/e2][starts-with(normalize-space( 0120.12 ) ,'01')= true] [starts-with(number( 0120.12 ) ,'1')= true]

[root/e2][starts-with( 0120.12,01)= true] [starts-with( 0120.12,'01')= false] [starts-with( 0120.12,1)= true] [starts-with( 0120.12,00001)= true]

[starts-with(string( 3453.45 ),'345')= false] [starts-with(number( 3453.45 ),'345')= true] [starts-with( e2,'e')= true]

[string-length( 789.789 )= 29] [string-length(normalize-space( 789.789 ))= 7]

[contains( 789.789 , 789)= true]

[substring('substring',3,4)= bstr] [substring(123456, 2,10)= 23456] [substring(123456, -2,4)= 1] [substring(123456, 5,-2)= ]

[substring-after('12-34-56', '-')= 34-56] [substring-after('12-34-56', '')= 12-34-56]

[substring-before('12-34-56', '-')= 12] [substring-before('12-34-56', '')= ]

[translate('12a34b56c', 'abc', 'xyz')= 12x34y56z] [translate('12a34b56c', 'abcdefg', 'xyz')= 12x34y56z] [translate('12a34b56c', 'abc', 'xyzlmn')= 12x34y56z] [translate('12a34b56c78a90b12c', 'abc', 'xyz')= 12x34y56z78x90y12z]

Qt樣式表學習

目錄 1.何為qt樣式表 2.樣式表語法基礎 3.方箱模型 4.前景與背景 5.建立可縮放樣式 6.控制大小 7.處理偽狀態 8.使用子部件定義微觀樣式 8.1.相對定位 8.2.絕對定位 1.何為qt樣式表 樣式表是通過qstyle的乙個叫qstylesheet的特殊子類來實現的。這個特殊的子類實...

CSS層疊樣式表 定義樣式表

定義樣式表 1 html標記定義 p p可以叫做選擇器,定義那個標記中的內容執行其中的樣式 乙個選擇器可以控制若干個樣式屬性,他們之間需要用英語 隔開,最後乙個可以不應加 2 class定義 class定義是以 開始 p3 id 定義 id定義是 開始的 p4 優先順序問題 id class htm...

基準樣式表

翻譯 css的初學者常因為瀏覽器的預設樣式表,而生產一些錯誤。可以設定乙個基本的樣式表,恢復css最基本的樣貌。global settings html,body body headings h1,h2,h3,h4,h5,h6 h1 h2 h3 common formatting p,ul,ol u...