xsl正则表达式变量,它有一个url

时间:2012-05-16 10:15:07

标签: xslt

我的xsl变量的值如下所示

<xsl:variable name="url">
        <xsl:value-of select="'http://1.2.34.4:70/Anything/uri'"/>
      </xsl:variable>

我需要用名称 - abcd.com替换ip地址和端口组合部分,然后将其存储在另一个变量中。所以变量的值为'http://abcd.com/Anything/uri'。我怎样才能做到这一点。我必须使用正则表达式。变量url也可以以https开头,而且uri可以有任意数字的斜杠。即代替/ Anything / uri它可以有/ uri或/ Anything / other / uri

1 个答案:

答案 0 :(得分:1)

此XSLT 1.0转换:

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

 <xsl:variable name="vReplacement" select="'abcd.com'"/>

 <xsl:template match="/">
     <xsl:variable name="vUrl" select="'http://1.2.34.4:70/Anything/uri'"/>

     <xsl:variable name="vReplaced">
       <xsl:value-of select="concat(substring-before($vUrl,'//'), '//')"/>
       <xsl:value-of select="concat($vReplacement, '/')"/>
       <xsl:value-of select="substring-after(substring-after($vUrl,'//'),'/')"/>
     </xsl:variable>

     "<xsl:copy-of select="$vReplaced"/>"
 </xsl:template>
</xsl:stylesheet>

应用于任何XML文档(未使用)时,将变量$vReplaced设置为所需的正确值并将其内容复制到输出

"http://abcd.com/Anything/uri"

解释:正确使用 substring-before() substring-after() concat()