使用XSLT构建href=链接

5
我希望创建这个:

我想要创建这个:

<a href="domain.com?=USERNAME">Login</a>

需要将HTML输出与当前登录的用户相关联,因此在XML中USERNAME =。有人能给些建议吗?

我知道可以使用:

<xsl:variable name="class" select="a:Subject"/>
<p class="{$class}">English</p>

提取值并将其用作CSS类,但如何在链接中使用它?


不了解XML文件的结构,回答起来会比较困难。 - Darin Dimitrov
6个回答

8

我想我可能已经自己回答了:

<xsl:variable name="username" select="Username"/>
<a href="{$username}">Login</a>

4
使用xsl:attribute有什么问题吗?
<a><xsl:attribute name='href' select='Username' />Login</a>

挑剔一点:缺少URL编码是错误的。考虑到创建HTML输出是设计目标之一,XSLT 1.0中缺少一个体面的URL编码函数。 - Tomalak
1
使用 xsl:attribute 有什么问题吗?select 不是 xsl:attribute 的有效属性 - Ian Boyd
你花了四年时间才发现那个错误?;-) - Wim ten Brink

2
同样的。
<a href="domain.com?={$user}">OMG!</a>

1
使用 Oracle XE 示例数据库,我想生成一个客户表,其中 - 如果客户有一个或多个联系人或订单 - 我希望有一个链接到这些列表的列表,并将 CUSTOMER_ID 作为 GET(query_string)变量传递。操作步骤如下:
以下是从Oracle的DBMS_XMLGEN.getXML函数获取的XML示例...
<?xml version="1.0" encoding="UTF-8"?>
<ROWSET>
 <ROW>
  <CUSTOMER_ID>177</CUSTOMER_ID>
  <NAME>United Continental Holdings</NAME>
  <ADDRESS>2904 S Salina St, Syracuse, NY</ADDRESS>
  <WEBSITE>http://www.unitedcontinentalholdings.com</WEBSITE>
  <CREDIT_LIMIT>5000</CREDIT_LIMIT>
  <ORDERS>0</ORDERS>
  <CONTACTS>1</CONTACTS>
 </ROW>
 <ROW>
  <CUSTOMER_ID>180</CUSTOMER_ID>
  <NAME>INTL FCStone</NAME>
  <ADDRESS>5344 Haverford Ave, Philadelphia, PA</ADDRESS>
  <WEBSITE>http://www.intlfcstone.com</WEBSITE>
  <CREDIT_LIMIT>5000</CREDIT_LIMIT>
  <ORDERS>2</ORDERS>
  <CONTACTS>1</CONTACTS>
 </ROW>
</ROWSET>

这是样式表...

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html> 
<body>
  <table border="1">
    <xsl:for-each select="ROWSET/ROW">
    <tr>
       <xsl:apply-templates/>
    </tr>
    </xsl:for-each>
  </table>
</body>
</html>
</xsl:template>

<!-- these nodes have specific behaviour -->

<xsl:template match="ORDERS">
<td>
<xsl:if test=". &gt; 0">
    <!-- here's the anchor tag -->
    <a href="/Orders?CUSTOMER_ID={../CUSTOMER_ID}"><xsl:value-of select="."/></a>
</xsl:if>
</td>
</xsl:template>

<xsl:template match="CONTACTS">
<td>
<xsl:if test=". &gt; 0">
    <a href="/Contacts?CUSTOMER_ID={../CUSTOMER_ID}"><xsl:value-of select="."/></a>
</xsl:if>
</td>
</xsl:template>

<!-- all other node are just displayed as a cell -->

<xsl:template match="*">
<td><xsl:value-of select="."/></td>
</xsl:template>
</xsl:stylesheet>

渲染为HTML后,锚点看起来像这样...
http://localhost:8080/Orders?CUSTOMER_ID=184

0

仅做说明,如果您需要将“&”符号作为URL的一部分来发送多个值,可以使用它。

<a href="ESMData.aspx?dni={DNI}&amp;consulta=1">Ficha Técnica</a>

-1

xsl:attribute 是有效的:

<a><xsl:attribute name='href'><xsl:value-of select='Username'/></xsl:attribute>Login</a>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接