我正在尝试对XML文件的各个节点执行检查,并根据特定节点的内容执行某些操作,例如,如果类型是bool显示复选框,或者类型是文本显示textarea或下拉选项框。
例如:
<Questions>
<Question>
<Data>What gender are you?</Data>
<Type>pulldown</Type>
</Question>
<Question>
<Data>Do you like Chocolate?</Data>
<Type>checkbox</Type>
</Question>
</Questions>
提前致谢
我不确定我是否应该使用xsl:choose/xsl:when
或xsl:if
答案 0 :(得分:3)
<xsl:choose>
可以而且应该始终尽可能避免。
此XSLT转换演示了如何在不使用任何硬连线条件逻辑的情况下以不同方式处理不同的Question
类型:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="Question[Type='pulldown']">
<!-- Implement pull-down here -->
</xsl:template>
<xsl:template match="Question[Type='checkbox']">
<!-- Implement checkbox here -->
</xsl:template>
</xsl:stylesheet>
<xsl:choose>
应该放弃,因为我们在OOP中避免使用switch(type)语句并使用虚函数的原因相同。这使得代码更短,减少了出错的可能性,更加可扩展和可维护,甚至在编写之前就支持未来的代码。
答案 1 :(得分:1)
似乎最适合您需求的构造是xsl:choose
:
<xsl:template match="Question">
<xsl:choose>
<xsl:when test="Type = 'checkbox'">
<!-- output checkbox code -->
</xsl:when>
<xsl:when test="Type = 'pulldown'">
<!-- output pulldown code -->
</xsl:when>
<xsl:otherwise>
<!-- output default code -->
</xsl:otherwise>
</xsl:choose>
</xsl:template>