我有一个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>