[英]Pass parameter from jsp into xsl
我的下面的代碼似乎合乎邏輯但是我不知道為什么排序不能用於錯誤“ 變量或參數'排序'是未定義的。” “? 我懷疑在xsl中聲明param有什么問題。 誰能指出我的錯誤? 謝謝
java代碼傳遞參數
String sort = "rating";
transformer.setParameter("sort", sort); /It will control the sort in xsl
xml文件
<?xml version="1.0" ?>
<cd>
<title>A Funk Odyssey</title>
<artist>Jamiroquai</artist>
<tracklist>
<track id="1">
<title>Feels So Good</title>
<time>4:38</time>
<rating>2</rating>
</track>
<track id="2">
<title>Little L</title>
<time>4:10</time>
<rating>5</rating>
</track>
<track id="3">
<title>You Give Me Something</title>
<time>5:02</time>
<rating>3</rating>
</track>
<track id="4">
<title>Corner of the Earth</title>
<time>3:57</time>
<rating>1</rating>
</track>
</tracklist>
</cd>
這是我的xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>
<xsl:param name="sort" select="title"/>
<xsl:template match="/">
<table border="1">
<thead>
<tr>
<th><a href="#">Title</a></th>
<th><a href="#">Time</a></th>
<th><a href="#">Rating</a></th>
</tr>
</thead>
<tbody>
<xsl:for-each select="cd/tracklist/track">
<xsl:sort select="$sort"/>
<tr>
<td><xsl:value-of select="title" /></td>
<td><xsl:value-of select="time" /></td>
<td><xsl:value-of select="rating" /></td>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:template>
</xsl:stylesheet>
在xsl:param
聲明中,您嘗試默認為$sort
,而xsl:param
在評估時未定義。 它看起來像是對自己的引用。
如果您不需要默認值,則只需將參數聲明更改為:
<xsl:param name="sort"/>
或默認為字符串值:
<xsl:param name="sort" select="'title'"/>
要么
<xsl:param name="sort">title</xsl:param>
也就是說,我們只解決了參數聲明問題。 現在進行排序。 xsl:sort
需要一個表達式 ,它不會像你期望的那樣將字符串值轉換為XPath。
這是一個解決方案 : 在<xsl:sort select=""/>
使用變量 。
你基本上會這樣做:
<xsl:sort select="*[name() = $sort]"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.