如果未使用XML和XSLT选择spinner中的选项,如何隐藏其他字段?
E.g我有一个带有三个选项的微调器
Option 1: Form 1
Option 2: Form 2
Option 3: Others
如果用户选择选项1,将显示选项1下的所有字段,而选项2下的字段为隐藏(反之亦然)
这是对的吗?
<xsl:template match="/">
<xsl:apply-templates select="Form/Field">
<xsl:variable name="Category" select="Spinner"/>
<select id="Form">
<xsl:for-each select="$Item">
<xsl: value="{.}">
<xsl:attribute name="type"/>
</xsl:if>
<xsl:value-of select="."/>
</xsl:template>
XML:
<Field name="Category" type="Spinner" label="Please choose">
<Item code="CashPickupForm" label="Cash Pickup"/>
<Item code="HomeVisitForm" label="Home Visit"/>
<Item code="OtherForm" label="Others"/>
</Field>
这里有一些Form 1的XML
<Form name="CashPickup"
type="TextView"
label="Cash Pick-up Form">
<Field name="ContractNumber" type="TextView" label="Contract number" value=""/>
<Field name="ClientName" type="TextView" label="Client Name" value=""/>
<Field type="Delimiter"/>
XSL:
<xsl:template match="/">
<xsl:apply-templates select="Form"/>
</xsl:template>
<xsl:template match="Form">
<xsl:element name="Form">
<xsl:attribute name="name">
<xsl:value-of select="@name"/>
</xsl:attribute>
<xsl:attribute name="type">
<xsl:value-of select="@type"/>
</xsl:attribute>
<xsl:attribute name="label">
<xsl:value-of select="@label"/>
</xsl:attribute>
<xsl:copy-of select="namespace::*[not(name()='ns2') and not(name()='')]"/>
<xsl:call-template name="Arrange"/>
</xsl:element>
</xsl:template>
<xsl:template name="Arrange">
<xsl:apply-templates select="Field[@name='ContractNumber']"/>
<xsl:apply-templates select="Field[@name='ClientName']"/>
<Field type="Delimiter"/>
XML表单2:
<Form name="HomeVisitForm"
type="TextView"
label="Home Visit Form">
<Field name="ContractNumber" type="TextView" label="Application number" value=""/>
<Field name="TypeCheck" type="TextView" label="Type of check" value=""/>
<Field type="Delimiter"/>
XSL:
<xsl:template match="/">
<xsl:apply-templates select="Form"/>
</xsl:template>
<xsl:template match="Form">
<xsl:element name="Form">
<xsl:attribute name="name">
<xsl:value-of select="@name"/>
</xsl:attribute>
<xsl:attribute name="type">
<xsl:value-of select="@type"/>
</xsl:attribute>
<xsl:attribute name="label">
<xsl:value-of select="@label"/>
</xsl:attribute>
<xsl:copy-of select="namespace::*[not(name()='ns2') and not(name()='')]"/>
<xsl:call-template name="Arrange"/>
</xsl:element>
</xsl:template>
<xsl:template name="Arrange">
<xsl:apply-templates select="Field[@name='ContractNumber']"/>
<xsl:apply-templates select="Field[@name='TypeCheck']"/>
<Field type="Delimiter"/>
答案 0 :(得分:1)
假设您将一个名为FormType
的参数传递给包含值1
或2
的XSLT(作为一个开头,以及稍后可能的其他值),您可以增强您的XSLT以下方式:
...
<xsl:parameter name="FormType"/>
...
<xsl:template match="/">
<xsl:apply-templates select="Form"/>
</xsl:template>
<xsl:template match="Form">
<Form name="{@name}"
type="{@type}"
label="{@label}">
<xsl:copy-of select="namespace::*[not(name()='ns2') and not(name()='')]"/>
<xsl:call-template name="Arrange"/>
</Form>
</xsl:template>
<xsl:template name="Arrange">
<xsl:apply-templates select="Field[@name='ContractNumber']"/>
<xsl:if test="$FormType = '1'">
<xsl:apply-templates select="Field[@name='ClientName']"/>
<!-- you may put more fields here if applicable-->
</xsl:if>
<xsl:if test="$FormType = '2'">
<xsl:apply-templates select="Field[@name='TypeCheck']"/>
</xsl:if>
...
<!-- you may put more if blocks here if applicable -->
...
<Field type="Delimiter"/>
...
</xsl:template>
注意:
<xsl:element>
代码。<xsl:if>
代码。<xsl:if>
块中。