http://www.iloveyou10000.com

新blogs地址 http://itares.cnblogs.com

博客园 首页 新随笔 联系 订阅 管理

XML数据一个最普通的问题就是数据的大小写,在进行数据转换时常常产生令人头疼的麻烦。下面就是一个 解决的办法。

假设你有一些数据要发送到另外一个系统,它也识别XML格式的数据,而且要求全部大写,例子数据如下:

例子1:person.xml

<Person> <Name> <First>net_lover</first> <Last>Xianhui Meng</last> <ChineseName>孟宪会</chinesename> </name> </person>

假设你要转换成如下的格式:

例子2: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文件如下:

例子3: person.xsl

<?xml version="1.0" encoding="gb2312"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <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">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 </xsl:variable> <xsl:variable name="encoded"> K1aWXJBb2cRdeAMfQgL8yhij976klEFzmYSnIo4DpTZq5rNsUtC0uOPvVwGxH3 </xsl:variable> <foo><xsl:value-of select="translate('This is a test', $alphanumeric, $encoded)" /></foo>

加密后结果如下:

<foo>8Snr6nr6k6NzrN</foo>

解密也很简单,只要把两个变量颠倒即可。

<?xml version="1.0" encoding="gb2312"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:variable name="alphanumeric">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789</xsl:variable> <xsl:variable name="encoded">K1aWXJBb2cRdeAMfQgL8yhij976klEFzmYSnIo4DpTZq5rNsUtC0uOPvVwGxH3</xsl:variable> <xsl:template match="/"> <foo><xsl:value-of select="translate('This is a test', $alphanumeric, $encoded)" /></foo> ||| <foo><xsl:value-of select="translate('8YS5 S5 6 rF5r', $encoded,$alphanumeric )" /></foo> </xsl:template> </xsl:stylesheet>
posted on 2006-06-14 17:32  fanrsh  阅读(255)  评论(0编辑  收藏  举报