假设我有两种类型的XML元素,其文本内容可以是“true”或“false”:
<elementA>true</elementA>,
<elementB>false</elementB>
我想创建一个新元素
<result>$content</result>
其中变量$ content可以基于两个输入元素值具有4种类型的值:
true,true - &gt;甲
true,false - &gt;乙
false,true - &gt; ç
false,false - &gt; d
我试图用xsl:function解决这个问题,但不知道如何同时选择这两个元素(我对xslt的经验不多)。 是否有可能进行这种转变?
修改
我正在尝试你的第二个解决方案,但我的主要问题是我不知道如何将变量传递给我的函数。目前我有以下代码:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:function name="transform">
<xsl:param name="p1"></xsl:param>
<xsl:param name="p2"></xsl:param>
<xsl:choose>
<xsl:when test="$p1='true' and $p2='true'">
<orderingType>RND</orderingType>
</xsl:when>
<xsl:when test="$p1='true' and $p2='false'">
<orderingType>FIX</orderingType>
</xsl:when>
<xsl:when test="$p1='false' and $p2='false'">
<orderingType>PREF</orderingType>
</xsl:when>
</xsl:choose>
</xsl:function>
<xsl:template match="//action/*">
<xsl:variable name="var1" select="shuffle"></xsl:variable>
<xsl:variable name="var2" select="limitOn"></xsl:variable>
</xsl:template>
答案 0 :(得分:1)
怎么样:
<xsl:variable name="index" select="2*(elementA='false') + (elementB='false')" />
<result>
<xsl:value-of select="substring('ABCD', $index + 1, 1)" />
</result>
或者,使用xsl:choose
并在xsl:when
指令中明确指定每个案例及其结果:
<xsl:choose>
<xsl:when test="elementA='true' and elementB='true'">A</xsl:when>
<xsl:when test="elementA='true' and elementB='false'">B</xsl:when>
<xsl:when test="elementA='false' and elementB='true'">C</xsl:when>
<xsl:otherwise>D</xsl:otherwise>
</xsl:choose>
答案 1 :(得分:0)
模板应该这样做;
<xsl:template match="xml-fragment">
<xsl:variable name="p1">
<xsl:value-of select="elementA"/>
</xsl:variable>
<xsl:variable name="p2">
<xsl:value-of select="elementB"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="$p1='true' and $p2='true'">
<orderingType>RND</orderingType>
</xsl:when>
<xsl:when test="$p1='true' and $p2='false'">
<orderingType>FIX</orderingType>
</xsl:when>
<xsl:when test="$p1='false' and $p2='false'">
<orderingType>PREF</orderingType>
</xsl:when>
</xsl:choose>
</xsl:template>