我想根據XML值(1,2,3,4)的返回值來顯示頁面A,B,C,D。我的方法是通過JavaScript或XSLT:選擇。我想知道哪種方式更好,爲什麼?我可以做這種情況 - 選擇.cs代碼(好還是壞)?我應該在XSLT的JavaScript代碼?社區可以提供建議嗎?謝謝。良好的編碼風格在XSLT中進行大小寫選擇
下面是代碼。
的Javascript的方式(這一個工程):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:js="urn:custom-javascript">
<xsl:template match="page">
<msxsl:script language="JavaScript" implements-prefix="js">
<![CDATA[
function translateSkillLevel(level)
{
switch (level)
{
case 0: return "Level 1";
case 1: return "Level 2";
case 2: return "Level 3";
}
return "unknown";
}
]]>
</msxsl:script>
<div id="skill">
<table border="0" cellpadding="1" cellspacing="1">
<tr>
<th>Level</th>
</tr>
<xsl:for-each select="/page/Skill">
<tr>
<td>
<!-- difference here -->
<script type="text/javascript">
document.write(translateSkillLevel(<xsl:value-of select="@level"/>));
</script>
</td>
</tr>
</xsl:for-each>
</table>
</div>
</xsl:template>
</xsl:stylesheet>
的Javascript方式(這個是不行的,越來越不確定的JS代碼):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:js="urn:custom-javascript">
<xsl:template match="page">
<msxsl:script language="JavaScript" implements-prefix="js">
<![CDATA[
function translateSkillLevel(level)
{
switch (level)
{
case 0: return "Level 1";
case 1: return "Level 2";
case 2: return "Level 3";
}
return "unknown";
}
]]>
</msxsl:script>
<div id="skill">
<table border="0" cellpadding="1" cellspacing="1">
<tr>
<th>Level</th>
</tr>
<xsl:for-each select="/page/Skill">
<tr>
<td>
<!-- difference here -->
<xsl:value-of select="js:translateSkillLevel(string(@level))"/>
</td>
</tr>
</xsl:for-each>
</table>
</div>
</xsl:template>
</xsl:stylesheet>
XSLT方式:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="page">
<div id="skill">
<table border="0" cellpadding="1" cellspacing="1">
<tr>
<th>Level</th>
</tr>
<xsl:for-each select="/page/Skill">
<tr>
<td>
<xsl:choose>
<xsl:when test="@level = 0">
Level 1
</xsl:when>
<xsl:when test="@level = 1">
Level 2
</xsl:when>
<xsl:when test="@level = 2">
Level 3
</xsl:when>
<xsl:otherwise>
unknown
</xsl:otherwisexsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:for-each>
</table>
</div>
</xsl:template>
</xsl:stylesheet>
編輯: 另外,我有一些內嵌的JavaScript表單功能提交。
<input type="submit" onclick="javascript:document.forms[0].submit();return false;"/>
好問題,+1。查看我的答案,瞭解最可定製,靈活和可擴展的XSLT解決方案。同時它非常簡單,它甚至不包含單個選擇邏輯指令。 :) – 2011-02-05 18:32:29