如何在 XSLT 中将字符串格式化为 Pascal 大小写?
我正在尝试在 XSLT 中格式化字符串,这些字符串需要采用帕斯卡大小写才能正确用于我正在使用的应用程序。
例如:
this_text 将变为 ThisText
this_long_text 将变为 ThisLongText
是否也可以进行设置,以便我可以将输入发送到格式,这样我就不必多次重新创建格式?
I'm trying to format strings in XSLT that needs to be in pascal case to be used appropriately for the application I'm working with.
For example:
this_text would become ThisText
this_long_text would become ThisLongText
Is it possible to also set this up where I can send an input to the format so I do not have to recreate the format multiple times?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
此转换:
应用于此 XML 文档时:
产生所需的结果:
顺便说一句,这是camelCase,这是是 PascalCase
This transformation:
when applied on this XML document:
produces the desired result:
BTW, this is camelCase and this is PascalCase
两年后,这是一个 XSLT 2.0 解决方案:
它将 'this_long_text' 或 'this-long-text' 帕斯卡化为 'ThisLongText',因为它会在任何非单词字符上中断。
在我最熟悉的正则表达式风格(perl、pcre 等)中,下划线被视为 '\w' 字符类的一部分(因此不是 \W 的一部分),但对于 XSLT 2.0,使用 XSD 数据类型( http://www.w3.org/TR/xmlschema-2/) 和 '\w' 定义为:
所以 '\W' 包含下划线。
Here, two years after the fact, is an XSLT 2.0 solution:
It will pascalize either 'this_long_text' or 'this-long-text' to 'ThisLongText' because it breaks on any non-word characters.
In the regex flavors I am most familiar with (perl, pcre, etc.), an underscore is considered part of the '\w' character class (therefore not part of \W), but for XSLT 2.0 the XSD datatypes are used (http://www.w3.org/TR/xmlschema-2/) and '\w' is defined as:
so '\W' includes an underscore.
这个版本对我有用。我添加了一个选择,当不再存在下划线时,输出字符串的“其余部分”。
另外,如果有人来这里寻找反向过程(我今天碰巧也需要这个过程,并且在任何地方都找不到没有一个例子)......
我喜欢它当我完全有意识地放弃几个小时后,我的潜意识大脑就会弹出一个答案。 ;-)
This version worked for me. I added a choose that outputs "the rest" of the string when no more underbars are present.
Also, in case anyone comes here looking for the reverse process (which I happened to also require today and could find not a single example of anywhere)...
I love it when my subconscious brain pops up an answer a few hours after I've completely given up consciously. ;-)
我试图通过以下 XLST 函数调用来实现“帕斯卡化”:
不幸的是,处理器抛出错误消息“replace() 中的替换字符串无效:
\ 字符后面必须跟 \ 或 $"
问题是 \U 修饰符,它应该对匹配的模式进行大写转换。如果我将其更改为
输出字符串包含序列 '\U' 因为它现在已被转义- 但我不想逃避它,我希望它有效;-) 我做了测试
(没有将匹配转换为大写)并且效果很好,但当然它没有大写,只是删除下划线并替换。下划线后面的字母本身而不是大写。我在这里做错了什么吗?或者我的 XSLT 处理器的正则表达式实现根本不支持 \U 修饰符?
I was trying to achieve the "pascalizing" with the following XLST function call:
Unfortunately the processor throws the error message "Invalid replacement string in replace():
\ character must be followed by \ or $"
the problem is the \U modifier which is supposed to do the uppercase conversion of the matched pattern. If I change it to
the output string contains the sequence '\U' because it is now esacped - but I don't want to escape it, I want it do be effective ;-) . I did test
(without converting the match to uppercase) and that works fine. But of course it does no uppercasing, just removes underscores and replaces the letter after the underscore by itself instead of capitalizing it. Am I doing something wrong here or is the \U modifier simply not supported in the regex implementation of my XSLT processor?
感谢 Dimitre,我才能够顺利完成大部分任务。当通过 Pascalize 模板运行我的字符串时,最后一个“_”后面的位被切断。可能有一种更简洁的方法,但这是我使用的代码:
Thanks to Dimitre, I was able to get most of the way there. When running my strings through the Pascalize template, the bit after the last '_' was cut off. There's probably a cleaner way of doing it, but here's the code I used: