首页 > 解决方案 > 选择字符串中的第一个空格

问题描述

我想在文本中选择字符串的第一个空格。

输入 :

<p>Text 1<italic>should</italic> Text 2.</p>

后面有一个空格</italic>。我只想选择该空间并替换<s>该空间的 a 。我怎样才能做到这一点。

尝试过的代码:

<xsl:template match="p/text()[2]"> 
    <s/>
</xsl:template>

预期成绩 :

<p type="body">Text 1
   <style type="underline">should</style><s/>have surgery.</p>

这个尝试过的代码不能正常工作。我正在使用 xslt 2.0

标签: xslt

解决方案


在 XSLT 2.0 中,您可以:

<xsl:template match="p/text()[preceding-sibling::*[1][self::italic]]">
    <xsl:analyze-string select="." regex="^\s" >
        <xsl:matching-substring>
            <s/>
        </xsl:matching-substring>
        <xsl:non-matching-substring>
            <xsl:value-of select="." />
        </xsl:non-matching-substring>
    </xsl:analyze-string>
</xsl:template>

这匹配紧跟在italic元素之后的文本节点,并检查第一个字符是否为空格。如果是,它将被一个空s元素替换。


或者,您可以将匹配模式本身限制为仅包含以空格开头的节点:

<xsl:template match="p/text()[preceding-sibling::*[1][self::italic]][starts-with(., ' ')]">
    <s/>
    <xsl:value-of select="substring(., 2)" />
</xsl:template>

推荐阅读