曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
規則將無效。例如,按照如下方式,通過匹配根元素,并且既不應用模板,也不使用xsl:for-each 來處理子元素,就可以
阻止所有的處理過程:
<xsl:template match="/">
</xsl:template>
14.8.2 文本節點的缺省規則
細心的讀者或許已經注意到,有幾個例子似乎已輸出了有些元素的內容,但實際上沒有獲得輸出的元素值!這些內容是由
XSL 用于以元素內容出現的文本節點的缺省規則提供的。此規則如下:
<xsl:template match="text()">
<xsl:value-of select="."/>
</xsl:template>
這一規則匹配所有的文本節點(match="text()"),并輸出文本節點(<xsl:value-of select="."/>)的值。換言之,此規
則將文本從輸入復制到輸出。
XML 實用大全
第 495 頁
本規則確保最少輸出一個元素的文本,即使沒有任何規則明確地與此文本匹配。對于特定的元素(從中可或多或少獲得元素
的文本內容),另一個規則可以覆蓋此規則。
14.8.3 兩個缺省規則的含義
這兩個缺省的規則結合在一起,意味著把只有xsl:stylesheet 元素而不包括任何子元素的空樣式單(如清單14-14)應用
于XML 文檔時,將把輸入元素中所有的#PCDATA 復制到輸出。但是,這種方法不產生任何標記?墒沁@些規則的優先級很低。
因此,任何其他匹配都優先于這兩個規則。
清單14-14:空的XML 樣式單
<?xml version=“1.0”?>
<xsl:stylesheet
xmlns:xsl=“http://www.w3.org/XSL/Transform/1.0”>
</xsl:stylesheet>
在Internet Explorer 5.0 中,對XSL 產生混淆的最常見的根源之一是,沒有提供任何缺省規則。要確保明確地匹
配準備輸出其內容(包括其后代)的任何節點。
XML 實用大全
第 496 頁
14.9 決定輸出要包含的內容
在未讀取輸入文檔時,推遲決定輸出何種標記往往是必要的。例如,或許想將FILENAME 元素的內容改為A 元素的HREF 特性,
或者根據特性的值,將輸入文檔中的某個元素類型用輸出文檔中的幾個不同元素類型代替。這可以通過使用xsl:element、
xsl:attribute、xsl:pi、xsl:comment 和xsl:text 來實現。在這些元素的內容中使用XSL 指令,并在這些元素的特性值中
使用特性值模板,就能改變它們的輸出內容。
14.9.1 使用特性值模板
特性值模板將數據從輸入中的元素內容復制到樣式單中的特性值中。從那里,就可將其寫入輸出中。例如,假定根據要利用
下面的基于特性的形式將周期表轉換成空的ATOM 元素:
<ATOM NAME=”Vanadium”
ATOMIC_WEIGHT=”50.9415”
ATOMIC_NUMBER=”23”
OXIDATION_STATES=”5, 4, 3, 2”
BOILING_POINT=”3650K”
MELTING_POINT=”2163K”
SYMBOL=”V”
DENSITY=”6.11 grams/cubic centimeter”
/>
為此,需要提取輸入文檔中元素的內容,并將這些內容放在輸出文檔的特性值中。首先,要完成下列內容:
<xsl:template match=”ATOM”>
<ATOM NAME=”<xsl:value-of select=’NAME’/>”
ATOMIC_WEIGHT=”<xsl:value-of select=’ATOMIC_WEIGHT’/>”
ATOMIC_NUMBER=”<xsl:value-of select=’ATOMIC_NUMBER’/>”
/>
</xsl:template>是畸形的XML。在特性值內部不能使用<字符。而且,要編寫在大多數一般情況下都能解析此句的軟件,是
極其困難的。
取而代之的是,在特性值內部,以放在花括號{}中的數據來代替xsl:value-of 元素。上面的正確編寫方式如下:
<xsl:template match=”ATOM”>
XML 實用大全
第 497 頁
<ATOM NAME=”{NAME}/>”
ATOMIC_WEIGHT=”{ATOMIC_WEIGHT}/>”
ATOMIC_NUMBER=”{ATOMIC_NUMBER}/>”
/>
</xsl:template>
在輸出文檔中,{NAME}由當前節點的NAME 子元素值所代替。{ATOMIC_WEIGHT}由當前節點的ATOMIC_WEIGHT 子元素值所代替。
{ATOMIC_NUMBER}由當前節點的ATOMIC_NUMBER 子元素值所代替,等等。
特性值模板的模式比只是一個元素名要復雜。實際上,在特性值模板中,可使用前面討論過的任何字符串表達式。例如,下
面的模板規則以清單14-1 中使用的形式來選擇DENSITY 元素。
<xsl:template match=”DENSITY”>
<BULK_PROPERTY
NAME=”DENSITY”
ATOM=”{../NAME}”
VALUE=”{.}”
UNITS=”{@UNITS}”
/>
</xsl:template>
上面的模板規則將特性值模板轉換成類似于如下所示的BULK_PROPERTY 元素:
< BULK_PROPERTY NAME=”DENSITY” ATOM=”Helium” VALUE=”
0.1785
“ UNITS=”grams/cubic centimeter”/>
特性值并不局限于在一個特性值模板中使用?梢詫⑻匦灾的0迮c文字數據或其他特性值模板組合起來使用。例如,下面的
模板規則匹配ATOM 元素,并且將元素名以H.html、He.html 等格式設置成鏈接文件,來代替這些元素。此文件名來源于特
性值模板{SYMBOL},而文字數據提供句號和擴展名。
<xsl:template match=”ATOM”>
<A HREF=”{SYMBOL}.html”>
XML 實用大全
第 498 頁
<xsl:value-of select=”NAME”/>
</A>
</xsl:template>
在特性值中,可以包含多個特性值模板。例如,下面的模板規則將密度單位作為VALUE 特性的一部分,而不是使密度單位成
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML實用大全(140)