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><value-of select="translate('This is a test', 'tis', 'TIS')"></value-of></foo>

转换后结果如下:

<foo>ThIS IS a TeST</foo>

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

先定义两个变量:

<variable name="uppercase">ABCDEFGHIJKLMNOPQRSTUVWXYZ</variable><variable name="lowercase">abcdefghijklmnopqrstuvwxyz</variable>

再进行转换:

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

结果如下:

<foo>THIS IS A TEST</foo>

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

例子3: person.xsl

<?xml version="1.0" encoding="gb2312"?><stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><variable name="uppercase">ABCDEFGHIJKLMNOPQRSTUVWXYZ</variable><variable name="lowercase">abcdefghijklmnopqrstuvwxyz</variable><template match="/"><person><name><first><value-of select="translate(/Person/Name/First,$lowercase,$uppercase)"></value-of></first><last><value-of select="translate(/Person/Name/Last,$lowercase,$uppercase)"></value-of></last></name></person></template></stylesheet>

启发

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

例子:

<variable name="alphanumeric">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 </variable><variable name="encoded"> K1aWXJBb2cRdeAMfQgL8yhij976klEFzmYSnIo4DpTZq5rNsUtC0uOPvVwGxH3 </variable><foo><value-of select="translate('This is a test', $alphanumeric, $encoded)"></value-of></foo>

加密后结果如下:

<foo>8Snr6nr6k6NzrN</foo>

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

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

相关文章:

  • 2022-01-04
  • 2021-06-07
  • 2022-12-23
  • 2021-05-25
  • 2021-09-20
  • 2021-10-12
  • 2022-01-26
猜你喜欢
  • 2022-02-09
  • 2021-12-05
  • 2022-12-23
  • 2022-02-07
  • 2021-11-27
  • 2021-04-06
相关资源
相似解决方案