使用XSLT 1.0,如何只抓取字符串的第一个单词以保存到变量

时间:2016-05-03 17:54:30

标签: xslt-1.0

有没有人知道一个适用于XSLT 1.0的好模板?

示例:

string ="亲爱的朋友们,你好,你好吗"

我想要"你好"没有别的。

2 个答案:

答案 0 :(得分:1)

正如我在评论中所说,这取决于你如何定义" word" - 或者更确切地说,单词分隔符。在您的示例中,使用:

提取"Hello"是微不足道的
substring-before($string, ' ')

但是,它不能用,比如说:

"Hello, my dear friends: how are you doing?"

或:

"Hello/Bye alternatives."

答案 1 :(得分:0)

以下是使用 FXSL Functional programming library for XSLT 通用解决方案

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext">
 <xsl:import href="strSplit-to-Words.xsl"/>

 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="/*">
    <xsl:call-template name="str-split-to-words">
      <xsl:with-param name="pStr" select="."/>
      <xsl:with-param name="pDelimiters" select="' ,:?./&#xA;'"/>
    </xsl:call-template>
  </xsl:template>
</xsl:stylesheet>

将此转换应用于以下XML文档

<t>
Hello, my dear friends: how are you doing?
Buy/Sell recommendations.
</t>

产生了想要的正确结果

<word>Hello</word>
<word>my</word>
<word>dear</word>
<word>friends</word>
<word>how</word>
<word>are</word>
<word>you</word>
<word>doing</word>
<word>Buy</word>
<word>Sell</word>
<word>recommendations</word>
<word/>

<强>解释

此代码调用FXSL模板 str-split-to-words 。 可以指定$pDelimiters参数以包含字符串,其中任何单个字符都是可在标记化中识别的分隔符。

请注意:假设样式表模块作为文件保存在FXSL所在的同一目录中 - 否则需要修改<xsl:import>指令确切的文件路径到这个目录。

此处解释了 FXSL 的基本原则: http://fxsl.sourceforge.net/