Curent output Expected output我正在尝试使用另一个xsl模板匹配中的xsl模板填充下拉列表。我得到空的下拉菜单。如何从xsl模板获取dropdwon中的值?
我有2个模板。模板1具有首选项列表,模板2具有用户详细信息列表。我正在尝试用用户详细信息列表填充表格。而且我需要将首选项列表填充为表中列的一次作为下拉值。我得到一个空的下拉列表。所附图片供参考
XML输入
<USERLIST>
<record num="0"><SERIALNUMER>01</SERIALNUMER><NAME>Rahul</NAME>
<SELECTEDPREFERENCE>Pref2</SELECTEDPREFERENCE></record>
<record num="1"><SERIALNUMER>02</SERIALNUMER><NAME>Khan</NAME>
<SELECTEDPREFERENCE>Pref4</SELECTEDPREFERENCE></record>
<record num="2"><SERIALNUMER>03</SERIALNUMER><NAME>Raju</NAME>
<SELECTEDPREFERENCE>Pref2</SELECTEDPREFERENCE></record>
</USERLIST>
<PREFERENCE_LIST>
<record num="0"><PREFERENCE_ID>pref1</PREFERENCE_ID></record>
<record num="1"><PREFERENCE_ID>pref2</PREFERENCE_ID></record>
<record num="2"><PREFERENCE_ID>pref3</PREFERENCE_ID></record>
<record num="3"><PREFERENCE_ID>pref4</PREFERENCE_ID></record>
<record num="4"><PREFERENCE_ID>pref5</PREFERENCE_ID></record>
</PREFERENCE_LIST>
XSLT
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
<xsl:template match="/page">
<div style="margin: 0px; background-color: #ffffff;">
<form action="Useraction" method="post" id="user_search" onsubmit="if (document.getElementById('user_search').action.value=='') return false; else return true;" style="margin: 0px; border: 0px; padding-top: 0px;">
<hr style="color: #003399; width: 100%; height: 3px; border: 0px; margin-top: 0px; margin-bottom: 5px;" />
<table style="width: 100%; text-align: center; border: 0; background-color: #ffffff; margin-bottom: 1px; margin-top: 1px;" cellspacing="0" cellpadding="0">
<tr>
<td class="tableheader3" style="white-space: nowrap; width: 30px;height:30px">
<p align="center">
<input class="tabletext" type="button" value="Alle" onclick="javascript:markAll(document.getElementById('user_search'), 'UserId_')" style="width: 50px;" />
</p>
</td>
<td class="tableheader5" style="width: 30px; text-align: center;">Serial Number</td>
<td class="tableheader5" style="white-space: nowrap; width: 60px;">Name</td>
<td class="tableheader5" style="white-space: nowrap; width: 40px;">Preference</td>
</tr>
<tr>
<td colspan="12">
<hr style="border-top: 1px solid #1A15B7; background: transparent;"> </hr>
</td>
</tr>
<xsl:if test="USERLIST/record">
<xsl:apply-templates select="USERLIST/record" />
<tr>
<td colspan="12">
<img src="images/td_background4.jpg" style="width: 100%; height: 5px; border: 0px;" alt="" />
</td>
</tr>
</xsl:if>
</table>
</form>
</div>
</xsl:template>
<xsl:template match="PREFERENCE_LIST/record">
<xsl:if test="PREFERENCE_ID=/page/parameters/preference">
<option value="{PREFERENCE_ID }" selected="selected ">
<xsl:value-of select="PREFERENCE_ID " />
</option>
</xsl:if>
<xsl:if test="not(PREFERENCE_ID =/page/parameters/preference)">
<option value="{PREFERENCE_ID }">
<xsl:value-of select="PREFERENCE_ID " />
</option>
</xsl:if>
</xsl:template>
<xsl:template match="USERLIST/record">
<tr>
<td class="tabletext" style="white-space: nowrap;">
<xsl:value-of select="SERIALNUMER" />
</td>
<td class="tabletext" style="white-space: nowrap;">
<xsl:value-of select="NAME" />
</td>
<td class="tabletext" style="white-space: nowrap;">
<select class="tabletext" name="preference" style="width:79px;">
<option><xsl:attribute name="value"><xsl:value-of select="SELECTEDPREFERENCE"/>
</xsl:attribute></option>
<option value="" />
<xsl:apply-templates name="PREFERENCE_LIST/record" />
</select>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
如评论中所述,name
在xsl:apply-templates
上不是有效的属性,但是假设您将其更改为select
,则未选择任何内容的原因是您当前位于模板与record
元素匹配,因此<xsl:apply-templates select="PREFERENCE_LIST/record" />
会查找名为record
的{{1}}的子元素,该子元素不存在。
您需要在层次结构中向上导航两个级别才能获得PREFERENCE_LIST
,因此您实际上应该这样写:
PREFERENCE_LIST
我要冒昧地猜测您要在下拉列表中选择用户的<xsl:apply-templates select="../../PREFERENCE_LIST/record" />
作为选项吗?在这种情况下,您需要将用户选择的首选项传递给SELECTEDPREFERENCE
模板。
尝试使用这两个模板
record
请注意,使用<xsl:template match="PREFERENCE_LIST/record">
<xsl:param name="pref" />
<option value="{PREFERENCE_ID}">
<xsl:if test="$pref = PREFERENCE_ID">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
<xsl:value-of select="PREFERENCE_ID " />
</option>
</xsl:template>
<xsl:template match="USERLIST/record">
<tr>
<td class="tabletext" style="white-space: nowrap;">
<xsl:value-of select="SERIALNUMER" />
</td>
<td class="tabletext" style="white-space: nowrap;">
<xsl:value-of select="NAME" />
</td>
<td class="tabletext" style="white-space: nowrap;">
<select class="tabletext" name="preference" style="width:79px;">
<option value="" />
<xsl:variable name="selectPref" select="translate(SELECTEDPREFERENCE, 'P', 'p')" />
<xsl:apply-templates select="../../PREFERENCE_LIST/record">
<xsl:with-param name="pref" select="$selectPref" />
</xsl:apply-templates>
</select>
</td>
</tr>
</xsl:template>
只是因为检查区分大小写,因此translate
将不匹配Pref2
。