我必须建立一个小的条件语句,我不确定最好的方法。我也不确定你是否可以在选择/何时声明中加入IF测试。 (我假设你不能??)
尝试解决以下问题: 将“custom_field”从一个系统映射到单独系统中的“Position”:如果自定义字段恰好为空白,则默认为在系统A中从系统A到“位置”的相同命名字段“位置”中传递的值。
默认情况下,“位置”会出现,并且在xml中永远不应为空白,但自定义字段可能为空白。首选项是使用自定义字段,但如果为空,则应启用默认数据。
<user>
<Custom_Field>Data</Custom_Field>
<Position>Data</Position>
</user>
这是合法的吗?
<xsl:choose>
<xsl:if test="custom_field != ''">
<Position><xsl:value-of select='.'/></Position>
</xsl:if>
</xsl:choose>
或者,Choose语句仅适用于When? 如何评估自定义字段是否为空白,如果为空,则设置默认方案?
对不起 - 这是一个水槽或游泳环境,我还在学习。非常感谢所有帮助,并注明以供将来参考。
我正在尝试基于XML中的数据实现的可能方案:
场景1: 输入XML:
<user>
<Custom_Field>Admin</Custom_Field>
<Position>Teacher</Position>
</user>
输出XML:
<user>
<Position>Admin</Position>
</user>
场景2: 输入XML:
<user>
<Custom_Field></Custom_Field>
<Position>Teacher</Position>
</user>
输出XML:
<user>
<Position>Teacher</Position>
</user>
答案 0 :(得分:3)
我想补充一点:XSLT初学者经常过度使用xsl:choose。您没有显示足够的代码来查看这是否是这种情况。但很多时候,在XSLT中进行条件处理的正确方法是将模板规则分解为较小的规则,并将谓词放入匹配模式中,例如
<xsl:template match="para[@class='x']>...
<xsl:template match="para[@class='y']>...
答案 1 :(得分:1)
在xsl:choose
内,您只能使用xsl:when
或xsl:otherwise
。伪代码xsl:choose
可以写成
if (condition 1)
...
else if (condition 2)
...
else if (condition 3)
...
else
...
其中if
和else if
为xsl:when
,else
为xsl:otherwise
。
xsl:if
这只是一个条件:
if (condition)
...
<强>更新强>:
输入:
<user>
<Custom_Field>Data1</Custom_Field>
<Position>Data2</Position>
</user>
<强> XSLT 强>:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/user">
<Position>
<xsl:choose>
<xsl:when test="Custom_Field != ''">
<xsl:value-of select='Custom_Field'/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select='Position'/>
</xsl:otherwise>
</xsl:choose>
</Position>
</xsl:template>
</xsl:stylesheet>