我必须构建一个小的条件语句,但我不确定最好的方法。我也不确定是否可以将 IF 测试放在 Choose/When 语句中。 (我假设你不能?)
尝试解决以下情况: 将“custom_field”从一个系统映射到另一系统中的“Position”:如果自定义字段恰好为空,则默认为从系统 A 到系统 B 中的“Position”的同名字段“Position”中传递的值。
“位置”默认出现,并且在 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>
最佳答案
我想在答案中补充一点:XSLT 初学者经常过度使用 xsl:choose。您还没有显示足够的代码来查看这里是否是这种情况。但很多时候,在 XSLT 中进行条件处理的正确方法是将模板规则分解为更小的规则,并将谓词放入匹配模式中,例如
<xsl:template match="para[@class='x']>...
<xsl:template match="para[@class='y']>...
关于xml - 你可以放一个xsl :if test inside a Choose statement in an xslt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19508220/