XSL Identity Transformation

XSLT 的作用大家應該知道了,便是把 XML 的格式從一種轉成另一種。比如說,把 RSS 或 ATOM 轉為可在瀏覽器上直接觀看的 XHTML (Feedburner 的功能之一),又或者把 XML 格式簡化,程式更容易套取資料。但是,你可有想過以 XSLT 把格式原封不動的弄出來?

或許你會問,這樣是多此一舉,既然一樣啦,為甚麼還要 Transform?

除錯。可能大家沒有這樣的經驗:看不到源 XML。源 XML 是從呼叫 SAX 各個 handler 的函數虛擬出來,根本便沒有 XML 產生過,除錯的時候很來找到問題的所在。用 Identity Transform 就好了,甚麼 XML 經 Transformer 一過便列了出來。

有些時候想把特定的元件改變,但其他則維持原狀,也可以透過從 Identity Transformation 樣版匯入其他樣版達到目的。此外,就是弄出不同排位次序但資料不變的 XML 檔案。

把 identity transformation template 貼出來看看:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

延伸閱讀:XML.com: Using XSLT to Assist Regression Testing

XSL Family

因為工作需要,硬著頭皮「速成」了 XSL (XML Stylesheet Language Family)。XSL 是一套將 XML 資料變成另一種 XML 資料,及顯示 XML 資料的工具(本身也是 XML),有三名成員:

  1. XSLT(XSL Transformations,XSL 轉換)
    XSLT 給我的感覺很像 Regular Expression + Template,簡單的流程是在源 XML 找出要用的資料,再放到新 template 裏的變數裏去。例如 XML 格式裏有某個節點的資料要找出來,放進 HTML table 顯示給用家 (用家看不慣密麻麻的 XML 嘛)。XSLT 有點 programming 的意味 (有 foreach,也有 if else),但是本身也是一套格式表達的語言呢。
  2. XPath (XML Path Language,XML 路徑語言)
    這套不是 XML,卻是一套存取 XML 文件裏各元件資料 (包括元件值及屬性) 的語言。把 XPath 當成是在 XML 上使用的 SQL 較容易掌握。
  3. XSL – FO (XSL Formatting Object,XSL 格式化物件
    一套專門描述格式試定的 XML… 說穿了其實那是 XHTML 跟 CSS 合在一起,再刪減某些和格式無關的部份。