XML數據一個最普通的問題就是數據的大小寫
在進行數據轉換時常常產生令人頭疼的麻煩
下面就是一個 解決的辦法
假設你有一些數據要發送到另外一個系統
它也識別XML格式的數據
而且要求全部大寫
例子數據如下
例子
person
xml
<Person>
<Name>
<First>net_lover</First>
<Last>Xianhui Meng</Last>
<ChineseName>孟憲會</ChineseName>
</Name>
</Person>
假設你要轉換成如下的格式
例子
newperson
xml
<PERSON>
<NAME>
<FIRST>NET_LOVER</FIRST>
<LAST>XIANHUI MENG</LAST>
<CHINESENAME>孟憲會</CHINESENAME>
</NAME>
</PERSON>
解決這個轉換問題一般是用XPATH函數裡的translate()
例如
<foo><xsl:value
of select=
translate(
This is a test
tis
TIS
)
/></foo>
轉換後結果如下
<foo>ThIS IS a TeST</foo>
但是如何把全部的文字轉換成大寫呢?下面就是進行這樣處理的代碼
先定義兩個變量
<xsl:variable name=
uppercase
>ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
<xsl:variable name=
lowercase
>abcdefghijklmnopqrstuvwxyz</xsl:variable>
再進行轉換
<foo><xsl:value
of select=
translate(
This is a test
$lowercase
$uppercase)
/></foo>
結果如下
<foo>THIS IS A TEST</foo>
對剛才的問題
可以編寫XSL文件如下
例子
: person
xsl
<?xml version=
encoding=
gb
?>
<xsl:stylesheet xmlns:xsl=
version=
>
<xsl:variable name=
uppercase
>ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
<xsl:variable name=
lowercase
>abcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:template match=
/
>
<PERSON>
<NAME>
<FIRST><xsl:value
of select=
translate(/Person/Name/First
$lowercase
$uppercase)
/></FIRST>
<LAST><xsl:value
of select=
translate(/Person/Name/Last
$lowercase
$uppercase)
/></LAST>
</NAME>
</PERSON>
</xsl:template>
</xsl:stylesheet>
啟發
從上面的方法呢會想到什麼呢?對數據進行加密!對了
用這種方法可以實現XML數據的加密
例子
<xsl:variable name=
alphanumeric
>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
</xsl:variable>
<xsl:variable name=
encoded
>
K
aWXJBb
cRdeAMfQgL
yhij
klEFzmYSnIo
DpTZq
rNsUtC
uOPvVwGxH
</xsl:variable>
<foo><xsl:value
of select=
translate(
This is a test
$alphanumeric
$encoded)
/></foo>
加密後結果如下
<foo>
Snr
nr
k
NzrN</foo>
解密也很簡單
只要把兩個變量顛倒即可
<?xml version=
encoding=
gb
?>
<xsl:stylesheet xmlns:xsl=
version=
>
<xsl:variable
name=
alphanumeric
>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
</xsl:variable>
<xsl:variable
name=
encoded
>K
aWXJBb
cRdeAMfQgL
yhij
klEFzmYSnIo
DpTZq
rNsUtC
uOPvVwGxH
</xsl:variable>
<xsl:template match=
/
>
<foo><xsl:value
of select=
translate(
This is a test
$alphanumeric
$encoded)
/></foo>
|||
<foo><xsl:value
of select=
translate(
YS
S
rF
r
$encoded
$alphanumeric )
/></foo>
</xsl:template>
</xsl:stylesheet>
From:http://tw.wingwit.com/Article/program/net/201311/13900.html