我有一个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&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" />
但也没有使用。
任何人都可以帮助我...
答案 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&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>
元素。所以我担心你有些困惑。