XSLT转义XML属性的字符

时间:2009-12-10 19:09:29

标签: xml xslt escaping

我在一个框架(cocoon)中工作,这意味着我生成它们之后的页面会被我很少或根本无法控制的过程重新转换。我正在做的是进行Web服务调用,然后将结果转换为HTML页面进行演示。听起来像XSLT的工作。一切正常,直到XML文本节点中返回的数据为'&'其中的人物。返回的XML已正确转义,但我想将其放入锚节点的href属性中。我尝试过的所有东西都以非转义的“&”结束。字符显示在href属性中。例如:

如果从Web服务返回的节点如下所示:

<ns:name>Foo&amp;Bar</ns:name>

生成的<a>令牌(在页面源中)看起来像:

<a href="ADifferentPage.jsp?name=Foo&Bar">Foo&amp;Bar</a>

我当前的XSLT代码如下:

<a>
  <xsl:attribute name="href">
    ADifferentPage.jsp?name=<xsl:value-of select="ns:name" />
  </xsl:attribute>
  <xsl:value-of select="ns:name" />
</a>

期望的结果是:

<a href="ADifferentPage.jsp?name=Foo&amp;Bar">Foo&amp;Bar</a>

2 个答案:

答案 0 :(得分:1)

确定。虽然桑德的答案适用于我想要的想法,但实际上并没有解决我的问题。我应该在其他地方查看“编码与逃避”问题。由于我试图创建的是一个有效的href,实际上需要对变量的内容进行编码。

以下是实际传递有效href的代码:

<a>
  <xsl:attribute name="href">
    ADifferentPage.jsp?name=<xsl:value-of select="ns:name" mode="encode"/>
  </xsl:attribute>
  <xsl:value-of select="ns:name" />
</a>

<xsl:template match="ns:name" mode="encode">
   <xsl:value-of select="url:encode(text())" />
</xsl:template>

您还需要一些代码(由我公司提供给我,所以我无法分享)在Java中作为扩展进行编码,

答案 1 :(得分:0)

结果如预期。当输出方法设置为“html”时,属性值不是xml转义的。如果可能的话,当你尝试提供xml / xhtml时尝试将输出方法切换为“xml”