我有一个块如下。
<rightOperand>.*ifIndedx.*</rightOperand>
但我需要将上面的代码段改为下面的
<rightOperand>(?i)(?s).*ifIndex.*</rightOperand>
只有当右操作数以字符串.*
开头和结尾时才需要进行此翻译
请给我一些指示。
答案 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>