是否有可能在xsl中实现"if else,if else"?例如,我有数据:
<document>
<line>
<name>MAR111</name>
<value>1</value>
</line>
<line>
<name>MAR111</name>
<value>3</value>
</line>
<line>
<name>MEA111</name>
<value>1</value>
</line>
<line>
<name>MPR111</name>
<value>1</value>
</line>
<line>
<name>MEA111</name>
<value>4</value>
</line>
<line>
<name>MPR111</name>
<value>2</value>
</line>
</document>
Run Code Online (Sandbox Code Playgroud)
我需要获得三个具有三个名称的文档模板:
<document>
<MAR>
<name>MAR111</name>
<number>1</number>
<number>4</number>
</MAR>
</document>
<document>
<MEA>
<name>MEA111</name>
<number>1</number>
<number>4</number>
</MEA>
</document>
<document>
<MPR>
<name>MPR111</name>
<number>1</number>
<number>2</number>
</MPR>
</document>
Run Code Online (Sandbox Code Playgroud)
我尝试在应用模板上使用"选择,何时",但也许有更好的方法:
<xsl:template match="/">
<xsl:choose>
<xsl:when test="/document/line/name='MEA111'">
<xsl:apply-templates mode="MEA" select="/document"/>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/line/name='MPR111'">
<xsl:apply-templates mode="MPR" select="/document"/>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/line/name='MAR111'">
<xsl:apply-templates mode="MAR" select="/document"/>
</xsl:when>
</xsl:choose>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
lin*_*ogl 26
实际上你可以将它们合并在一起:
<xsl:template match="/">
<xsl:choose>
<xsl:when test="/document/line/name='MEA111'">
<xsl:apply-templates mode="MEA" select="/document"/>
</xsl:when>
<xsl:when test="/document/line/name='MPR111'">
<xsl:apply-templates mode="MPR" select="/document"/>
</xsl:when>
<xsl:when test="/document/line/name='MAR111'">
<xsl:apply-templates mode="MAR" select="/document"/>
</xsl:when>
</xsl:choose>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
编辑:Petras,在你的澄清后,似乎你想要的更容易:
<xsl:template match="/">
<xsl:if test="/document/line/name='MEA111'">
<xsl:apply-templates mode="MEA" select="/document"/>
</xsl:if>
<xsl:if test="/document/line/name='MPR111'">
<xsl:apply-templates mode="MPR" select="/document"/>
</xsl:if>
<xsl:if test="/document/line/name='MAR111'">
<xsl:apply-templates mode="MAR" select="/document"/>
</xsl:if>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
最好的方法是使用单独的模板.
<xsl:template match="/document/line/name='MEA111'">
<xsl:apply-templates mode="MEA" select="/document"/>
</xsl:template>
<xsl:template match="/document/line/name='MPR111'">
<xsl:apply-templates mode="MPR" select="/document"/>
</xsl:template>
<xsl:template match="/document/line/name='MAR111'">
<xsl:apply-templates mode="MAR" select="/document"/>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
甚至更少的线条,这是更可维护的.