收藏本站 
广告服务 
网站地图 
>> 我们从网络和杂志上收集了近100000余篇各类电脑技术、网络技术、软件技术等方面的文章教程,我们的收录原则:不是精华拒不收录!
先飞电脑技术网技术文章
利用XSL对XML数据进行加密和大小写转换
[ 作者:佚名    转贴自:网络转载    阅读次数:23    更新时间:2007-6-22 12:28:00   录入:刘光勇 ]        
    XML数据一个最普通的问题就是数据的大小写,在进行数据转换时常常产生令人头疼的麻烦。下面就是一个 解决的办法。

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

例子1:person.xml

<FONT size=2><Person> <Name> <First>net_lover</First> <Last>Xianhui Meng</Last> <ChineseName>孟宪会</ChineseName> </Name> </Person> </FONT>

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

例子2:newperson.xml

<FONT size=2><PERSON> <NAME> <FIRST>NET_LOVER</FIRST> <LAST>XIANHUI MENG</LAST> <CHINESENAME>孟宪会</CHINESENAME> </NAME> </PERSON> </FONT>

解决这个转换问题一般是用XPATH函数里的translate(),例如:

<FONT size=2> <foo><xsl:value-of select="translate('This is a test', 'tis', 'TIS')" /></foo> </FONT>

转换后结果如下:

<FONT size=2> <foo>ThIS IS a TeST</foo> </FONT>

但是如何把全部的文字转换成大写呢?下面就是进行这样处理的代码:

先定义两个变量:

<FONT size=2> <xsl:variable name="uppercase">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable> <xsl:variable name="lowercase">abcdefghijklmnopqrstuvwxyz</xsl:variable> </FONT>

再进行转换:

<FONT size=2> <foo><xsl:value-of select="translate('This is a test', $lowercase, $uppercase)" /></foo> </FONT>

结果如下:

<FONT size=2> <foo>THIS IS A TEST</foo> </FONT>

对刚才的问题,可以编写XSL文件如下:

例子3: person.xsl

<FONT size=2><?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> </FONT>

启发

从上面的方法呢会想到什么呢?对数据进行加密!对了,用这种方法可以实现XML数据的加密。

例子:

<FONT size=2> <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> </FONT>

加密后结果如下:

<FONT size=2> <foo>8Snr6nr6k6NzrN</foo> </FONT>

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

<FONT size=2><?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> </FONT>
上一篇:在XSL里执行类似for(i=0;i<n;i++)的循环  下一篇: 在XSL中得到某节点到根节点的全路径的所有节点?  
网站主页 | 收藏本页 | 联系我们 | 广告服务 | 站点地图 | 会员注册 | 招聘信息 | 内容指正

联系QQ:先飞电脑技术网站事务联系QQ,点击可以直接留言. 32933427 电话:13710542091 [世界排名] 鄂ICP备05005890号