1

我的 xsl 变量的值如下

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

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

4

1 回答 1

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()

于 2012-05-16T12:18:11.477 回答