xml - XML/XSLT substring-before 能否将多个匹配字符串作为第二个参数?

标签 xml xslt

XML/XSLT 新手问题。我为此道歉。我收到了一大块代码,并被要求“看看这个”,但我对 XSLT 不是特别熟悉 :(

我有一个 .xsl 文件,它可以转换一大块故事文本,并使用以下行提取第一句话:

<xsl:value-of select="substring-before(story,'.')" />

大部分情况下,它工作正常。问题是这样的:如果第一个句子以问号或感叹号结尾,我将以两个句子结尾。

是否有任何方法可以按照以下方式做某事:

<xsl:value-of select="substring-before(story,'.' or '!' or '?')" />

或者有没有一种使用正则表达式的方法,例如

/^(.*?)[.?!]\s/

...只提取第一句话?

或者我是否完全偏离了目标,最好等待常驻 XSLT 专家回来? :)

最佳答案

如果您的标点符号字符集相对有限,您可以使用翻译功能将其全部映射到单个字符(例如句点),然后使用 substring-before。例如

<xsl:value-of select="substring-before(translate(story,'?!','..'),'.')" />

编辑:我应该回答你的实际问题,不 - 你不能将 bool 表达式作为 substring-before 中的第二个参数。

关于xml - XML/XSLT substring-before 能否将多个匹配字符串作为第二个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7571210/

相关文章:

xml - 使用 XSLT 显示时间表

xml - 加载样式表时出错 : Parsing an XSLT stylesheet failed

c# - 第一次机会异常(exception)是什么意思

php - 将数据从浏览器传递到 android

php - 无法弄清楚sql语句

xml - 需要 XSL 帮助

Android Gallery 性能最佳实践

php - 有没有办法通过节点名称获取简单的 XML 子元素?

java - xalan 验证 java.lang.NoSuchMethodException : For extension function

用于元素集合的 XSLT for-each 循环