日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

XSL语法

發布時間:2023/12/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XSL语法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先注意到的是,XSL文件本身即是一份 XML文件,所以在XSL文件的開頭,一樣有和XML文件相同的聲明。W3C這個XML的標準機構為XSL定義了很多標記(元素),XSL文件就是這些標記和HTML標記的組合。在XSL文件中,必須有如下一行的代碼:
??
??  <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
??
??  這里,xsl:stylesheet是XSL文件的根元素,在根元素中包含了所有的排版樣式,樣式表就是由這些排版樣式組合成的;xmlns:xsl="http://www.w3.org/TR/WD-xsl"這一句主要用來說明該XSL樣式表是使用W3C所制定的XSL,設定值就是XSL規范所在的URL地址。
??
??  實際上,這里"http://www.w3.org/TR/WD-xsl"就是一個名字空間(namespace),我們在上面關于XML Schema語法介紹的時候已經進行過介紹。這是一個標準的名字空間。"stylesheet","template","for-each"等等關鍵字都是這個名字空間所定義的。
??
??  當然在xsl:stylesheet還可以設定其他的屬性,其他的屬性有:
??
??   1. default-space:決定是否保留XML文件中的空白,僅當值為"default"時保留。
??
??   2. indent-result:決定是否保留XSL文件中的空白,值為"yes"時保留。
??
??   3. language:設定在XSL文件中使用的腳本語言。
??
??  然后,我們在上面的代碼中看到有如下的代碼:
??
??  <xsl:template match="/">
??    ………
??  </xsl:template>
??
??  這里實際上是表示了XSL解析器對XML文檔的處理過程,它從根節點(由match="/"決定,這里"/"就表示根節點)開始,對XML文檔進行遍歷,并根據具體的代碼從XML文檔中取出相關的內容。這里關于屬性match的取值是一個比較復雜的問題。它實際上表示的含義是從XML文檔中取出一個特定的節點集合(XML文檔可以被看成一個樹的結構,這個在后面關于XML解析器分析中有詳細的介紹)。這里,我們通過幾個簡單的例子來說明屬性match的取值。
??
??  比如下面一行代碼:
??
??  <xsl:template match="/">
??
??  這行代碼的意思是告訴XSL解析程序,當前需要處理的節點是根節點下的內容(用"/"來表示根節點),其實這里的match值內容的編寫是要符合XPath的語意。關于XPath我們在后面的章節中會進行詳細的介紹。
??
??  再舉一個例子:
??
??  <xsl:template match="shoppingcart/item">
??
??  這行代碼要匹配的是shoppingcart元素下的item元素。而不管shoppingcart在XML文檔結構樹下的哪一個位置。比如XML文檔的其中一段是這樣的。
??
??  <shoppingcart>
??  <item>
??  <itemNo>3333</itemNo>
??  <itemName>屠龍刀</itemName>
??  </item>
??  <item>
??  <itemNo>4444</itemNo>
??  <itemName>離別鉤</itemName>
??  </item>
??  </shoppingcart>
??
??  那么它匹配的內容就是
??   <item>
??   <itemNo>3333</itemNo>
??   <itemName>屠龍刀</itemName>
??   </item>
??   <item>
??   <itemNo>4444</itemNo>
??   <itemName>離別鉤</itemName>
??   </item>
??
??  而下面這個例子:
??
??  <xsl:template match="/shoppingcart/item">
??
??表示只匹配XML文檔根節點下的shoppingcart這個節點下的所有item元素。也就是說如果shoppingcart不是直接在根節點下的,它就不符合這個匹配條件。
??
??  再看一個例子:
??
??  <xsl:template match="price[@unit='USD']">
??
??這個例子說明要匹配的是這樣的節點:一個帶unit屬性的元素price,而且unit的值必須為"USD"。比如一段XML代碼是這樣的。
??
??  <price>
??   <unit>USD</unit>
??   <amount>100</amount>
??  </price>
??  <price>
??   <unit>RMB</unit>
??   <amount>300</amount>
??  </price>
??
??  那么它匹配的內容就是:
??
??  <price>
??   <unit>USD</unit>
??   <amount>100</amount>
??  </price>
??
??  實際上,存在許多各種符號用來表示匹配規則,我們在XPath語法介紹中會詳細涉及到。現在知道這么一個大概的概念就可以了。
??
??  我們用<xsl:template match="具體匹配表達式">這條語句找到了一些節點集合以后,我們就要從這個集合中找到特定的元素或者元素屬性的值,那么采用什么語句呢?就是用xsl:value-of select = ""這樣的語句來尋找特定的內容。
??
??  比如下面的例子中<xsl:value-of select="名稱"/>這行代碼就是表示定位XML文檔中的名稱元素的內容。在指定集合中可能存在多個名字元素,如果我們需要把它們一一列舉出來進行處理的話,就需要用到語句xsl:for-each select = "",注意這里涉及到一個作用范圍的概念,也就是說xsl:for-each select = ""這條語句是在一個指定的集合空間中執行的。比如上面例子中如下的代碼
??
??  這里的<xsl:for-each select="詞語">是在<xsl:template match="網絡用語集合">所指定的集合空間里面尋找元素"詞語"的。
??
??  同時,我們需要注意的是上面的代碼中,出現了一條語句
??
??   <xsl:apply-templates select="網絡用語集合" />
??
??  它表示什么意思呢,它實際上相當于C++中的一個過程調用,當XSL解析器執行到該語句的時候,它就會在代碼中尋找以<?xml:namespace prefix = xsl /><xsl:template match="網絡用語集合">開頭的代碼,所以在上面的例子程序中,以下的代碼可以看成是過程的實現。
??
??  
??  把看成是一個過程調用,把<xsl:template match="網絡用語集合">
??
??  …….
??  </xsl:template>
??
??  看成是過程的實現,有助于我們對XSL解析器執行過程的理解。這里match="網絡用語集合"可以理解為是傳遞給過程的參數,它表示過程實現體的集合范圍是該match所匹配的節點集合空間("網絡用語集合")。
??
??  如果我們要對表格中的元素進行排序該什么辦呢?比如說,在上面的例子中,我們需要按照名稱進行排序。很簡單對,改寫為如下的形式即可:
??
??  <xsl:for-each select="詞語" order-by="+名稱">,其中"+"表示按降序排列;"-"表示按升序排列。"order-by"是XSL語法中的關鍵字。
??
??  如果我們只想在列表中取出某幾行該怎么操作呢?比如我們只想取出名稱為"恐龍"的行,見下面的代碼:
??
??  這里有一個新的句法為:<xsl:template match="網絡用語集合">
??  <table Border="1">
??   <xsl:for-each select="詞語" order-by="-名稱">
??   <xsl:if test=".[名稱='恐龍']">
??   <tr>
??    <td><xsl:value-of select="名稱"/></td>
??    <td><xsl:value-of select="含義"/></td>
??   </xsl:if>
??   </xsl:for-each>
??  </table>
??  </xsl:template>
??
??  
??
??  它表示如果".[名稱='恐龍']"為真(TRUE)的話,就執行該段里面的語句,要是為假(FALSE)的話就不執行。它和C++中的if語句的概念基本是一樣的。
??
??  前面我們用<xsl:value-of select=""/>取出的都是一個元素的值,但是我們要取出元素某一個屬性的值該怎么做呢?采用下面的形式:
??
??  <xsl:value-of select="元素名稱/@屬性名稱"/>
??
??  比如一段XML代碼是這樣的:
??
??  <王朔 網址="www.wangshuo.com">知名作家加著名評論家王朔先生的地方</王朔>
??
??  我們可以用<xsl:value-of select="王朔/@網址"/>來得到值"www.wangshuo.com"。
??
??  以上包括了XSL的大多數基本的語法,更加詳細和完整的介紹需要參看W3C相關的最新的文檔,可以在WWW.W3C.ORG/TR下找到。
??
??  根據上面的分析,我們可以看到XSL實際上采用的是一種轉換的思想,它最終將XML文檔轉換為另一種可用于輸出的文檔,而CSS則沒有任何轉換動作,在整個過程中沒有任何新碼產生。 另外,在XSL中90%的樣式規定在CSS中都有定義,但仍然有一些效果是CSS無法描述的,必須使用XSL不可。這些功能包括文本的置換、根據文本內容決定顯示方式、文檔內容排序等,都是XSL所獨有的。再者,XSL遵從XML的語法,而CSS的語法自成體系。
??
??  選擇樣式單還要考慮不同瀏覽器對樣式單的支持程度。目前IE5與Netscape的最新版本都支持CSS,但支持的程度都有限。至今為止,IE5尚不能完全支持CSS1,即便是支持的部分也存在很多錯誤,對于CSS2也只提供部分支持。Netscape在對CSS的支持上已經優于IE5,它采用新一代的Raptor/Gecko引擎技術,已經能夠完全支持CSS1,但對CSS2的支持計劃尚不明朗。而對XSLT而言,只有IE5支持,Netscape5并不支持。

轉載于:https://www.cnblogs.com/Dicky/archive/2005/04/10/135252.html

總結

以上是生活随笔為你收集整理的XSL语法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。