使用Xsl:value-of正在转换&在url into&

时间:2011-04-07 11:59:34

标签: xslt

我有一个xml的东西likethis

<root>
<testxml>
<details  name="test" url="http://www.test.com/test.aspx?val=100&val2=200" />
</testxml>
<root>

当我使用xslt将此xml转换为另一个xml

<xsl:output method="html" indent="yes" encoding="UTF-8"  />

<xsl:template match="root/testxml/details">
    <convert>
        <xsl:attribute name="url">
            <xsl:value-of select="@url"/>
        </xsl:attribute>
    </convert>

我得到结果输出

<convert url="http://www.test.com/test.aspx?val=100&amp;val2=200">

而不是

<convert url="http://www.test.com/test.aspx?val=100&val2=200">

问题在于:&amp; in url正在改为&amp; amp; 我怎么能避免这种情况,我想要&amp;在url as&amp;。(not&amp; amp;)

我试过<xsl:value-of disable-output-escaping="yes" select="@url" /> 但也没有使用。

任何人都可以帮助我...

3 个答案:

答案 0 :(得分:4)

  

我得到结果输出

     

  而不是

     

  这里的问题是:&amp;在网址中   改为&amp;安培;

没有问题,网址根本没有改变

要验证这一点,请使用如下转换:

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

 <xsl:template match="/*">
     <xsl:value-of select="@url"/>
 </xsl:template>
</xsl:stylesheet>

将此转换应用于以下XML文档时:

<convert url="http://www.test.com/test.aspx?val=100&amp;val2=200"/>

结果是

http://www.test.com/test.aspx?val=100&val2=200

因此,URL没有以任何方式更改,并且其中只有一个&字符。

您观察到的是XML格式中某些特殊字符(通常为<&)的强制转义,如XML规范所规定。

一些特殊字符的转义永远不会改变转义字符串的内容 - 只是它在XML文档的一部分时的样子。

  

我怎么能避免这种情况,我想要&amp;在网址中   as&amp;。(not&amp; amp;)

你不能,如上所示,没有什么可以避免的。

答案 1 :(得分:1)

&安培;必须作为&amp; amp; amp;在XML文档的URL中。你不能拥有这样的未转换的&符号。

答案 2 :(得分:1)

Dimitre非常正确 - XML中的&符号必须始终被转义,并且不清楚为什么要这么难以阻止它。

我很困惑 - 你说你正在生成XML,但你使用HTML输出方法,但是你正在生成一个未在HTML中定义的<convert>元素。所以我担心你有些困惑。