xml - 你可以放一个xsl :if test inside a Choose statement in an xslt?

标签 xml xslt xpath

我必须构建一个小的条件语句,但我不确定最好的方法。我也不确定是否可以将 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/

相关文章:

XML 和 XSLT 保留 CDATA

python - 如何将 SBML 公式转换为程序代码?

使用 xquery 比较 XML

xml - 如何对该XML进行排序?

python - 如何验证模式对话框的存在

android - 指定的 child 已经有一个 parent 。您必须先在 child 的 parent 上调用 removeView()

XML 解析错误 : Extra content at the end of the document

xslt - 如何修复一些损坏的标签

java - 在 XML 文件中搜索元素值

xml - 如何在 xmlstarlet 中声明 XPath 命名空间?