XML属性的XSLT转义字符
我在一个框架(cocoon)中工作,这意味着在我生成页面后,页面会被我几乎无法控制的流程重新转换。我正在做的是进行一个web服务调用,然后将结果转换为HTML页面进行表示。听起来像是XSLT的工作。一切正常,直到XML文本节点中返回的数据包含一个“&”字符。返回的XML已正确转义,但我想将其放入锚节点的href属性中。我尝试过的每件事最后都会在href属性中显示未替换的“&”字符。例如: 如果从web服务返回的节点如下所示:XML属性的XSLT转义字符,xml,xslt,escaping,Xml,Xslt,Escaping,我在一个框架(cocoon)中工作,这意味着在我生成页面后,页面会被我几乎无法控制的流程重新转换。我正在做的是进行一个web服务调用,然后将结果转换为HTML页面进行表示。听起来像是XSLT的工作。一切正常,直到XML文本节点中返回的数据包含一个“&”字符。返回的XML已正确转义,但我想将其放入锚节点的href属性中。我尝试过的每件事最后都会在href属性中显示未替换的“&”字符。例如: 如果从web服务返回的节点如下所示: <ns:name>Foo&Bar</
<ns:name>Foo&Bar</ns:name>
<a href="ADifferentPage.jsp?name=Foo&Bar">Foo&Bar</a>
<a>
<xsl:attribute name="href">
ADifferentPage.jsp?name=<xsl:value-of select="ns:name" />
</xsl:attribute>
<xsl:value-of select="ns:name" />
</a>
Foo&;酒吧
结果是
我当前的XSLT代码如下所示:
<ns:name>Foo&Bar</ns:name>
<a href="ADifferentPage.jsp?name=Foo&Bar">Foo&Bar</a>
<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&Bar">Foo&Bar</a>
结果与预期一致。当输出方法设置为“html”时,属性值不是xml转义的。如果可能的话,在尝试交付xml/xhtml时,请尝试将输出方法切换为“xml”。虽然桑德的回答符合我的想法,但实际上并没有解决我的问题。我应该看看其他地方的“编码与逃逸”问题。因为我试图创建的是一个有效的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中作为扩展进行编码。您只需按原样键入代码,然后选择它并单击“代码”按钮,或者用4个前导空格键入所有代码。这将为您提供带有高亮显示的代码,让您不必为逃避所有HTMLYour代码的工作而头疼,您可以使用XMLSpy对我进行测试。您能否测试转换的输出,即在cocoon管道的其余部分处理输出之前?您是否试图在您的转换中添加一些东西来补偿这些后续转换的操作?如果是这样的话,那么(a)你可能想以错误的方式解决问题,因为任何这样的解决方案都是非常脆弱的,(b)为了帮助我们,我们需要更多关于这些后续转换的信息。