2012-04-17 127 views
5

我是XSLT的新手。我想用XSLT创建一个超链接。 应该是这样的:如何使用XSLT创建超链接?

请阅读我们的隐私政策。

“隐私政策”是链接,当点击这个,应该重定向到例如“www.privacy.com”

任何想法? :)

+0

XSLT不会做超链接。重新思考你的问题。 – 2012-04-17 03:37:31

+2

在考虑如何在XSLT中实现类似的功能时,将任务分成两部分:(a)确定要生成的HTML,以及(b)确定需要生成的XSLT代码。你说这个问题的方式表明你没有把握这种关注的分离。 – 2012-04-17 07:55:32

回答

11

这种转变

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/"> 
    <html> 
    <a href="www.privacy.com">Read our <b>privacy policy.</b></a> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

当应用于任何 XML文档(未使用),产生想要的结果

<html><a href="www.privacy.com">Read our <b>privacy policy.</b></a></html> 

,这是由浏览器显示为

阅读我们的隐私政策。

现在想象一下,没有什么是硬编码在XSLT样式表 - 而不是数据源XML文档在:

<link url="www.privacy.com"> 
Read our <b>privacy policy.</b> 
</link> 

那么这种转变

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="link"> 
    <a href="{@url}"><xsl:apply-templates/></a> 
</xsl:template> 
</xsl:stylesheet> 

当应用于上述XML文档时,会产生想要的正确结果

<a href="www.privacy.com"> 
Read our <b>privacy policy.</b> 
</a> 
-1

如果您想在XSLT中拥有超链接,那么您需要使用XSLT创建HTML输出。 在HTML中,你可以创建一个这样

<a href="http://www.yourwebsite.com/" target="_blank">Read our privacy policy.</a> 

在这整个文本中的超链接变成了超链接指向www.yourwebsite.com

+0

谢谢!我会试试这个! – JADE 2012-04-17 03:51:36

5

如果你想读一个XML文件中的超链接值,这应该工作:

假设:HREF是你的XML的特定元素的属性。

<xsl:variable name="hyperlink"><xsl:value-of select="@href" /></xsl:variable> 
<a href="{$hyperlink}"> <xsl:value-of select="@href" /></a> 
+2

'xsl:variable'不需要。只要做''。有关更多信息,请参阅http://www.w3.org/TR/xslt#attribute-value-templates。 – 2013-02-15 20:10:46