XML数据一个最普通的问题就是数据的大小写
在进行数据转换时常常产生令人头疼的麻烦
下面就是一个 解决的办法
假设你有一些数据要发送到另外一个系统它也识别XML格式的数据而且要求全部大写例子数据如下
例子personxml
<Person>
<Name>
<First>net_lover</First>
<Last>Xianhui Meng</Last>
<ChineseName>孟宪会</ChineseName>
</Name>
</Person>
假设你要转换成如下的格式
例子newpersonxml
<PERSON>
<NAME>
<FIRST>NET_LOVER</FIRST>
<LAST>XIANHUI MENG</LAST>
<CHINESENAME>孟宪会</CHINESENAME>
</NAME>
</PERSON>
解决这个转换问题一般是用XPATH函数里的translate()例如
<foo><xsl:valueof 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:valueof select=translate(This is a test $lowercase $uppercase) /></foo>
结果如下
<foo>THIS IS A TEST</foo>
对刚才的问题可以编写XSL文件如下
例子: personxsl
<?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:valueof select=translate(/Person/Name/First$lowercase$uppercase)/></FIRST>
<LAST><xsl:valueof 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>
KaWXJBbcRdeAMfQgLyhijklEFzmYSnIoDpTZqrNsUtCuOPvVwGxH
</xsl:variable>
<foo><xsl:valueof select=translate(This is a test $alphanumeric $encoded) /></foo>
加密后结果如下
<foo>SnrnrkNzrN</foo>
解密也很简单只要把两个变量颠倒即可
<?xml version= encoding=gb?>
<xsl:stylesheet xmlns:xsl= version=>
<xsl:variable
name=alphanumeric>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:variable
name=encoded>KaWXJBbcRdeAMfQgLyhijklEFzmYSnIoDpTZqrNsUtCuOPvVwGxH</xsl:variable>
<xsl:template match=/>
<foo><xsl:valueof select=translate(This is a test $alphanumeric $encoded) /></foo>
|||
<foo><xsl:valueof select=translate(YS S rFr $encoded$alphanumeric ) /></foo>
</xsl:template>
</xsl:stylesheet>