我有以下xml,其中<prvNum>
的值有一些特殊字符。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<prvNum>SPECIAL#1&</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>
有人可以告诉我我在做错的地方吗?
答案 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>