使用xsl替换特定的字符串



我有一个block如下。

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

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

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

只有当右操作数以字符串.*

开始和结束时才需要进行此转换

请给我指点一下。

你可以用一个额外的模板重写标识变换来匹配rightOperand中的文本,匹配你的标准

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

注意XSLT 1.0没有结束的函数,这就是为什么有额外的工作来检查以子字符串结束的原因。如果您使用的是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>

最新更新