XML转HTML:如何使用XSLT设置a标签的href属性?
解决XSLT中设置a标签href属性的问题
Hey there! 我看到你卡在给<a>标签的href属性赋值对应团队的web地址这一步了,这其实是XSLT里很常用的操作,我来帮你搞定~
首先,先纠正你现有XSLT里一个小问题:你开头的<xsl:apply-templates select="team"/>是多余的,而且它会在<html>标签之前输出内容,导致最终的HTML结构不合法,所以先把这行删掉。
接下来就是核心的href属性设置,在XSLT 1.0里,有两种常用的方式来实现:
方法1:使用属性值模板(更简洁)
属性值模板是用大括号{}包裹XPath表达式,XSLT会自动计算表达式的结果并替换成属性值。针对你的场景,只需要把<a>标签改成这样:
<a href="{web}">Show more</a>
这里的web是当前team节点下的子节点,大括号会自动取出它的文本内容作为href的值。
方法2:使用<xsl:attribute>标签
如果你更习惯显式的属性设置方式,也可以用<xsl:attribute>来定义href属性:
<a> <xsl:attribute name="href"> <xsl:value-of select="web"/> </xsl:attribute> Show more </a>
完整的修正后XSLT代码
把这些修改整合后,你的XSLT应该是这样的:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html"/> <xsl:template match="/"> <html> <head> <title>teams</title> <meta charset="UTF-8"/> </head> <body> <table> <tr> <th>Cod</th> <!-- 这里建议用<th>代替<td>,更符合表头的语义 --> <th>Web</th> </tr> <xsl:for-each select="teams/team"> <tr> <td><xsl:value-of select="@cod"/></td> <td><a href="{web}">Show more</a></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
另外小提醒一下:表头用<th>标签会比<td>更符合HTML的语义化规范,我也帮你调整了这个地方~
这样转换之后,每个“Show more”链接就会正确指向对应团队的web地址啦!
内容的提问来源于stack exchange,提问作者PIJUS_MAGNIFICUS
相关产品推荐
相关产品推荐

