使用XSLT进行百分比编码

时间:2017-02-08 10:52:14

标签: xslt

我有以下xml,其中<prvNum>的值有一些特殊字符。

 <?xml version="1.0" encoding="UTF-8"?>
<root>
   <prvNum>SPECIAL#1&amp;</prvNum>
</root>

现在我想对<prvNum>的值执行百分比编码。例如,在编码百分比之后,应该如下更改值:

SPECIAL%231%26

我正在尝试使用以下代码段,但无法实现所需的百分比编码:

encode-uri(<xsl:value-of select="normalize-space(//prvNum)"/>)

我的完整XSLT如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:template match="/">
      <Request>
         <xsl:apply-templates select="//root" />
      </Request>
   </xsl:template>
   <xsl:template match="Request">
      <requestSpecific>
         <xsl:value-of select="normalize-space(//prvNum)" />
      </requestSpecific>
   </xsl:template>
</xsl:stylesheet>

有人可以告诉我我在做错的地方吗?

1 个答案:

答案 0 :(得分:1)

这里我只是实现 TimC 建议的XPath 2.0函数encode-for-uri的应用程序。所以XSLT 2.0应该是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

   <!-- identity template -->
   <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()" />
        </xsl:copy>
   </xsl:template>   

   <xsl:template match="prvNum">
      <prvNum>
        <xsl:copy-of select="@*" />
        <xsl:value-of select="encode-for-uri(text())" />
      </prvNum>
   </xsl:template>

</xsl:stylesheet>