當 XML 遇到 XSL 及各類瀏覽器所產生的火花 !!

學習 XML 與 XSL 整合應用,已經有一段很長的日子。
之前,一直是以看看的心態在學它,所以,原理、語法及資料的呈現顯示,這只"看看"而已。沒有做太多的琢磨。

近來,工作上有所需要,且需實作以體現相關的結果來,才再次拿書作戰。這一戰才知問題多多 !!

  1. 事隔多年,各家瀏覽器的版本及功能,功能都已有大躍進。
  2. 要在瀏覽器上呈現資料,即然也不同;有的可以用拖拉帶入,有的則不可以,反需要用網頁伺服器的方式才行。
    也就是說,要用網頁方式來運行;如在 IIS 中,設定一個可瀏覽的虛擬目錄,再去瀏覽該目錄下的檔案。
  3. XSL 的 版本及指令語句的配合,也要相一致。

 

綜合上述摘要,結論如下:(2012/07/20 提記)

Google Chrome 20.0.1132.57 網頁伺服器呈現資料,XSL V1.0 不可用
Internet Explore 6.0.2900.5512 可拖拉,XSL V1.0, V2.0 均可用
Mozilla FireFox 12.0 可拖拉,XSL V2.0 均可用
   
XSL V1.0               XML <?xml-stylesheet type="text/xsl" href="配搭的XSL檔案.xsl"?>
                             XSL <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
   
XSL V2.0               XML

<?xml-stylesheet type="text/xsl" href="配搭的XSL檔案.xsl"?>
<RootElementName
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

                             XSL

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi ="http://www.w3.org/2000/10/XMLSchema-instance">

XSL V2.0               XML
(自訂 Namespace)

<?xml-stylesheet type="text/xsl" href="配搭的XSL檔案.xsl"?>
<RootElementName
xmlns=http://My-Company.com/namespace
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://My-Company.com/namespace">

                             XSL
(自訂 Namespace)

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi ="http://www.w3.org/2000/10/XMLSchema-instance"
xmlns:my=http://My-Company.com/namespace>

My-Company.com 依實務需要加以變更。

配合 XSL 體現含中文字的 XML會有亂碼?

個人使用 Altova XMLSpy 2012 版本,配合 XSL 在體現 XML 文件時,發現中文字有部份亂碼,
不知該如何排解?
** 使用 該軟體的 XSL Transfermation (F10) 的功能。

呈現出不正常的結果

image

其運作的過程中,出現的下列幾個錯誤訊息:

image

image

為了解問題所在;改在 IIS 下,重新瀏覽該檔案,則發現到一點問題也沒有。
(密訣:直接在 IIS 中,設定一個可瀏覽的虛擬目錄,再去瀏覽該目錄下的檔案,即可。)

image

要如何取得 MS-SQL 資料表的結構訊息?

要得知資料表的結構訊息,可以用 sp_columns 'Table_Name'   這是在 Query Analyzer 中運行。

若是要在 程式中 來取得相關表結構訊息,則要配合 syscolumnssysobjects 或是 syscolumns 及object_id()。

方法一:
select  a.*  from syscolumns a
left join sysobjects b on a.id=b.id
where b.name='Table_Name'

方法二:
select * from syscolumns where id=object_id('Table_Name')

其中有些欄位意義如下:
name  : 欄位的名稱
xtype  : 用以表示欄位的資料型態,可參考文章:SQL 系統資料表 syscolumns 的 xtype 數據意義?
length : 表示該欄位的寬度

SQL 系統資料表 syscolumns 的 xtype 數據意義?

SQL 系統資料表 syscolumns 記錄得資料庫中,所有被建置的資料表最重的訊息。
諸如:欄位名稱、寛度、資料型態…等。

其中,用以表示欄位的資料型態,是被呈現在 xtype 欄位中。但該欄位是以數字值來表示。
該如何得知該數字的含義?

事實上,相關資料是存放在 systypes 資料表中。

select * from systypes
order by xtype

------------------------------------------------------------
34    image
35    text
36    uniqueidentifier
48    tinyint
52    smallint
56    int
58    smalldatetime
59    real
60    money
61    datetime
62    float
98    sql_variant
99    ntext
104    bit
106    decimal
108    numeric
122    smallmoney
127    bigint
165    varbinary
167    varchar
173    binary
175    char
189    timestamp
231    sysname
231    nvarchar
239    nchar
------------------------------------------------------------