XSLT中的使用方式

版權聲明: 本文由 一隻博客 發表於 bloghome博客html

文章連接: https://www.bloghome.com.cn/user/cnn237111瀏覽器

XSLT 是一種用於將 XML 文檔轉換爲 XHTML 文檔或其餘 XML 文檔的語言。這種轉換一般由專用的軟件或者瀏覽器執行。目前,絕大多數主流的瀏覽器支持XSLT轉換。XSLT本質上也是一個XML文檔,所以它的編寫也是要遵循XML的基本規範。XSLT中有不少元素,此處總結一下<xsl:apply-templates>的使用方法。app

假設有以下一個XML文檔。ide

其中加粗的部分,是爲了可以使得瀏覽器可以轉換該XML文檔而引入指令語句,表示引入一個example.xslt文件函數

p_w_picpath

那麼任務的重點其實是編輯符合規範的example.xsl文件。咱們一步一步完善這個XSLT文件。首先加入 <xsl:template match="/">spa

節點,以下:3d

p_w_picpath

該節點中,match="/"表示匹配需轉換的xml文件中的根結點,這是一個XPath的路徑表達式,(XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進行遍歷,若是須要了解更多關於XPath的信息,能夠參考http://www.w3school.com.cn/xpath/index.asp)。所以 <xsl:template match="/"> </xsl:template> 也就表示了把須要轉換的XML文檔的根結點內的內容換成 <xsl:template match="/"> </xsl:template> 中的內容。即轉換後變成了:orm

 <html>xml

  <body>htm

<h2>職員列表清單</h2>

  </body>

 </html>

所以在IE中顯示的內容以下:

fbf803f755d94b9bbb1a431efb4c2fb2

接下來可使用<xsl:apply-templates>,<xsl:apply-templates>相似一個函數,對 <xsl:template match="/"> 中的每個元素作一次轉換。 <xsl:apply-templates> 老是包含在  <xsl:template >中的。

若是在XSLT中加了<xsl:apply-templates>,即以下:

p_w_picpath

那麼,默認的顯示了當前template中的根元素的值,由於當前template中的match是"/",對應的內容是XML文檔中的<company>節點的內容,所以把company節點下的元素值都顯示了,以下:

0ca7d1da36d243fbb3236d8245386aa7

這類直接獲取了company節點下的值,而且也沒指定要如何轉換,所以等價於下面的寫法:

p_w_picpath

若是隻要獲取staff的值,那麼在select的時候,指定staff節點既能夠了。

p_w_picpath

或者,也能夠同時修改template的match值:

p_w_picpath

顯示的內容都是同樣的,以下圖:

2b68ef8d2d3746029220d8ea53e7bb71

事實上,上例中,咱們定義了模板,改模板只要求匹配"/"即根結點元素,對於根結點內的子元素,如何轉換並沒有響應的模板來指明,所以下一步,在定義一個新的模板,來指明如何對staff元素實行轉換:

p_w_picpath

此處添加了一個新的模板,這個模板只對staff元素生效。所以,在上面<xsl:apply-templates select="company/staff"/>應用這個模板時,檢測到下面有對應的模板,就會根據該模板來轉換當前的元素。所以顯示效果以下:

3c854f786418484da453d4f1ca6d24a1
也就是說,至關於把XML轉換成了以下的html代碼:

<html>

<body>

  <h2>職員列表清單</h2>

  <b>姓名:張三</b>: 性別:male年齡:30

  <b>姓名:李四</b>: 性別:female年齡:22

  </body>

</html>

更完善的,咱們能夠再添加一個模板,顯示老闆的信息,以下:

p_w_picpath

轉換結果以下:

01196919cf4b449cbe991c2ca50c3514

至此, <xsl:apply-templates />的使用方法也有大體的解了,總結一下:

<xsl:apply-templates/>老是包含在<xsl:template />中,當轉換軟件遇到這個語句時,就會對 <xsl:apply-templates/>所匹配的元素進行轉換(所匹配的元素由select屬性設置,該值是一個XPath中的路徑表達式,而且和<xsl:template />中的match相關)。

<xsl:apply-templates/>在對元素應用模板的時候,會去文檔中查看是否存在一個對應的模板(即該模板定義瞭如何轉換 <xsl:apply-templates/>匹配的元素)。所謂處理轉換,實際上就是把XML文檔中的值,代入模板,並輸出代入後的模板內容,相似變量賦值。

網上看到一篇文章http://www.cnblogs.com/it_mac/archive/2010/06/27/1766151.html,做者列出了他的錯誤。實際上,錯誤是因爲第18行<xsl:apply-templates/>,該語句的執行,是在<xsl:template match="cd">下,即在對cd下的元素作轉換的時候。cd下有3個子元素title,artist和tracks,這3個子元素都會作轉換,只不過因爲並未找到和title,artist元素相對應的模板,所以把他們按文本的形式輸出了,因此轉換的結果就如做者寫的那樣。

這裏只須要作一個小改動,把語句改爲<xsl:apply-templates select="tracks"/>便可,這表示,對cd下的元素,只選擇tracks元素作轉換,就解決問題了。

相關文章
相關標籤/搜索