我想在xslt上使用以下模板:
<xsl:template match="data/test/row> <!-- This 'match' is from database -->
<label class="checkbox-inline">
<input type="checkbox" id="someid" name="somename" value="{CATEGORY_ID}" /><xsl:value-of select="CATEGORY_NAME}" />
</label>
</xsl:template>
<xsl:template match="data/test/row> <!-- This 'match' is from database same as above -->
<label class="checkbox-inline">
<input type="checkbox" id="someid" name="somename" value="{CATEGORY_ID}" disabled="true" /><xsl:value-of select="CATEGORY_NAME}" />
</label>
</xsl:template>
我根据xslt中的角色格式化了上面的2。
如何在我的xslt中以这样的方式制定模板,即基于说,角色? 例如,
<xsl:choose>
<xsl:when test="ROLE_NAME = 'Normal User'>
<!-- use disabled input-->
</xsl:when>
<xsl:otherwise>
<!-- use enabled input-->
</xsl:otherwise>
</xsl:choose>
<!-- Role comes form another place... Here is a sample: -->
<ROOT>
<ROLE_NAME>Admin</ROLE_NAME>
<ROLE_NAME>Normal User</ROLE_NAME>
</ROOT>
答案 0 :(得分:1)
您必须在某处获取角色信息。如果它是源XML中的某些数据,则可以通过XPath提取它。由于它是运行时信息(当前用户的角色),因此可以通过参数获取。我会假设您以某种方式拥有该角色,并将其归因于参数或变量。
要测试它,您的属性是$role-name
变量的初始值,添加select="
普通用户'“。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="role-name"/>
...
</xsl:stylesheet>
在某个匹配父节点的模板中,您可以测试参数,并使用mode
中的<xsl:template>
属性决定要调用的模板:
<xsl:template match="/">
<xsl:choose>
<xsl:when test="$role-name = 'Normal User'">
<xsl:apply-templates mode="disabled"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates mode="enabled"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
enabled
和disabled
是我为模式选择的任意名称。您现在必须相应地标记模板。现在,它们不仅会匹配XPath表达式,还会匹配mode
名称:
<xsl:template match="data/test/row" mode="enabled"> <!-- This 'match' is from database -->
<label class="checkbox-inline">
<input type="checkbox" id="someid" name="somename" value="{CATEGORY_ID}" />
<xsl:value-of select="CATEGORY_NAME" />
</label>
</xsl:template>
<xsl:template match="data/test/row" mode="disabled"> <!-- This 'match' is from database same as above -->
<label class="checkbox-inline">
<input type="checkbox" id="someid" name="somename" value="{CATEGORY_ID}" disabled="true" />
<xsl:value-of select="CATEGORY_NAME" />
</label>
</xsl:template>
如果您当前的角色信息位于外部文档中,您还可以使用document()
函数将其分配给参数或变量(路径和文件名是任意选择的):
<xsl:param name="role-name" select="document('runtime-info.xml')/user/role"/>
如果它位于源文档中的某个位置,您只需找到它并发现如何通过XPath获取该数据。