使用xsl替换特定字符串

时间:2011-10-27 08:07:49

标签: xslt

我有一个块如下。

<rightOperand>.*ifIndedx.*</rightOperand>

但我需要将上面的代码段改为下面的

<rightOperand>(?i)(?s).*ifIndex.*</rightOperand>

只有当右操作数以字符串.*开头和结尾时才需要进行此翻译

请给我一些指示。

1 个答案:

答案 0 :(得分:1)

您可以使用额外模板覆盖身份转换,以匹配符合条件的 rightOperand 中的文字

<xsl:template match="rightOperand/text()
 [starts-with(., '.*')]
 [substring(., string-length(.) - 1, 2) = '.*']">

请注意,XSLT 1.0没有结束功能,这就是为什么还有额外的工作来检查 substring 的结尾。如果您使用的是XSLT 2.0,可以使用 ends_with 进行简化。

这是完整的XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="rightOperand/text()
   [starts-with(., '.*')]
   [substring(., string-length(.) - 1, 2) = '.*']">
      <xsl:text>(?i)(?s)</xsl:text><xsl:copy />
   </xsl:template>

   <xsl:template match="@*|node()">
      <xsl:copy>
         <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
   </xsl:template>
</xsl:stylesheet>

当应用于您的示例XML时,输出以下内容:

<rightOperand>(?i)(?s).*ifIndedx.*</rightOperand>