XSLT转换:Concat,Substring和Lowercase。不能让所有三个人一起工作

时间:2013-09-02 02:20:38

标签: xml xslt substring concat lowercase

我正在尝试使用xslt转换xml,以便输出可以是用户名。我想把字母“gg_”,然后是第一个字母的第一个字母,然后是整个姓氏。我希望整个字符串都是小写的。我已成功连接,并使用子字符串,但当我添加小写时,我的代码不起作用。

我尝试了很多不同的组合,并且一直在寻找解决方案,但我无法弄明白。 This question似乎与此类似,但我仍然无法让它发挥作用。

XSLT:使用concat和substring

<GGUSERNAME><xsl:value-of select="concat('gg_',substring(ww:User/ww:Personal_Data/ww:First_Name,1,1),ww:User/ww:Person_Data/ws:Last_Name)"/></GGUSERNAME>

XSLT我试过但不能上班:

<GGUSERNAME><xsl:value-of select="concat('gg_',substring(lower-case(ww:User/ww:Personal_Data/ww:First_Name),1,1),ww:User/ww:Personal_Data/ww:Last_Name)"/></GGUSERNAME>

<GGUSERNAME><xsl:value-of select="lower-case(concat('gg_',substring(ww:User/ww:Personal_Data/ww:First_Name,1,1),ww:User/ww:Personal_Data/ww:Last_Name))"/></GGUSERNAME>

谢谢!

1 个答案:

答案 0 :(得分:0)

欢迎使用Stack Overflow。

如果您以允许其他人重现问题的形式展示您尝试过的内容,则您更有可能对Stack Overflow上的问题做出良好的回答。在SO help files以及Eric Raymond和Rick Moen的论文How to ask questions the smart way中提出有效问题的建议很好。

然而,在这种情况下,解决方案非常明显,即使您的难度不是很明显。假设用户的给定名称和姓氏在变量$ givenname和$ familyname中,并且我们已经省略了任何非ASCII字符(如果我们分配此表单的用户ID,我猜我们正在使用那种组织,是的,那么

concat('gg_',
       substring($givenname,1,1),
       $familyname)

为您提供所需的串联,对于任何ASCII字符串,translate($string, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')强制为小写。将两者结合起来可以得到这样的结果:

translate(concat('gg_',
                 substring($givenname,1,1),
                 $familyname),
          'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 
          'abcdefghijklmnopqrstuvwxyz')

如果你允许你的用户拥有非ASCII字符的名字(如果你这样做,那么就是bravo),或者用户的给定名字和姓氏不在我假设的名字的变量中,那么你当然需要调整这个。在XSLT 2.0中,对更大字符集的调整将比在1.0中更容易;在2.0中,有一个内置的lower-case函数可以简化生活。