【问题标题】:Using XSL to combine two strings from XML, output as HTML使用 XSL 组合来自 XML 的两个字符串,输出为 HTML
【发布时间】:2010-09-22 16:16:39
【问题描述】:

我可以使用 XSL 模板将第二个字符串的第一个字母更改为小写吗?或者有没有办法在 HTML 中将第二个字符串的第一个字母更改为小写?第一个字母的伪代码不起作用,因为它只能是选择器的主题。

即:

在 XML 中:
“姓名”,
R返回某物的某物。”

需要(在 HTML 中):
名称r返回某物的某物。

【问题讨论】:

  • 好问题 (+1)。有关简短的 XSLT 解决方案,请参阅我的答案。 :)

标签: html css xslt uppercase lowercase


【解决方案1】:

此 XSLT 转换

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
  <xsl:variable name="v1stchar" select=
  "substring(translate(s[2],translate(s[2],'ABCDEFGHIJKLMNOPQRSTUVWXYZ', ''),''),1,1)"/>
  <xsl:value-of select=
  "concat(s[1],
          ' ',
          substring-before(s[2], $v1stchar),
          translate($v1stchar,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
          substring-after(s[2], $v1stchar)
          )
  "/>
 </xsl:template>
</xsl:stylesheet>

应用于此 XML 文档时

<t>
 <s>Name</s>
 <s>*R*eturns the something of the something.</s>
</t>

产生想要的正确结果

Name *r*eturns the something of the something.

即使在单个 XPath 表达式中也可以做到这一点,但它看起来非常笨拙。

【讨论】:

  • @Dimitre:很好的答案,但我认为 OP 的问题有 * 只是为了澄清。另外,必须说使用fn:translate(),您需要明确定义alfabeth。你知道,我不是英国人。
  • @Alejandro: 没问题,只要传递字母表,大小写作为参数。
  • @Alejandro:争论 OP 可能在想什么是没有用的……我们有他写的。显然,XLM 指的是 XML,而“sentense”指的是“字符串”。其他一切都是猜测,我们不要将我的幻想与您的幻想进行比较:)
  • @Dimitre:+1 幻想比赛!关于字母表:我现在不记得了,但不是有两个字符小写字母变成一个字符大写字母的字母表吗?
  • @Alejandro, @Dimitre:我认为唯一明智的解决方法是使用 XPath 2.0 的 fn:lower-case():“在将每个字符转换为它的小写对应者在 Unicode 标准 [The Unicode Standard] 中的相应大小写映射部分中定义。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-08
  • 2020-06-16
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
相关资源
最近更新 更多