1

我必须建立一个小的条件语句,我不确定最好的方法。我也不确定您是否可以在选择/何时声明中进行 IF 测试。(我假设你不能??)

尝试解决以下情况:将“custom_field”从一个系统映射到另一个系统中的“Position”:如果自定义字段恰好为空白,则默认为从系统 A 传递到同名字段“Position”中的值系统 B 中的“位置”。

“位置”默认情况下出现,并且在 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>

还是选择语句仅适用于何时?如何评估自定义字段是否为空白并设置默认方案(如果为空白)?

抱歉 - 它是一个水槽或游泳环境,我仍在学习。非常感谢所有帮助并注明以供将来参考。

我试图基于 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>
4

2 回答 2

3

我要为答案添加另一点:XSLT 初学者经常过度使用 xsl:choose。您没有显示足够的代码来查看这里是否是这种情况。但很多时候,在 XSLT 中进行条件处理的正确方法是将模板规则分解为更小的规则,并将谓词放入匹配模式中,例如

<xsl:template match="para[@class='x']>...

<xsl:template match="para[@class='y']>...
于 2013-10-22T07:26:57.983 回答
1

在里面xsl:choose你只能使用xsl:whenor xsl:otherwise。在伪代码xsl:choose中可以写成

if (condition 1)
...
else if (condition 2)
...
else if (condition 3)
...
else
...

在哪里ifelse ifxsl:whenelsexsl: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>
于 2013-10-22T03:08:39.690 回答