首页 > 解决方案 > 如何使用 xslt 在 foreach 循环上应用 if-else

问题描述

我必须使用 xslt 根据 if else 条件从有效负载过滤/分配数据到 xml 标签。

我必须在“ RIMSTS ”标签上应用 if-else,我正在使用下面的代码来应用。但它不起作用。它在验证过程中抛出了一些无效的 xslt。有人可以帮助我使用正确的语法或正确的方法在 for-each 中应用 if-else。

<xsl:for-each select="message/lines">
                    <LINE_SEG>
                        <xsl:if test="not(normalize-space(costAmount)) = ''">
                        <CSTMS_CST>
                          <xsl:value-of select="normalize-space(costAmount)"/>
                        </CSTMS_CST>
                        </xsl:if>
                        <PO_CHANNEL></PO_CHANNEL>
                      <xsl:choose>
                      <xsl:when test="linestatusCd = 100">
                        <RIMSTS>OPEN</RIMSTS>
                      </xsl:when>
                      <xsl:when test="linestatusCd= 200 or 300">
                        <RIMSTS>CLOSED</RIMSTS>
                      </xsl:when>
                      </LINE_SEG>
                    </xsl:for-each>

标签: xmlxsltxslt-1.0xslt-2.0

解决方案


linestatusCd= 200 or 300

看起来,你可能是说

linestatusCd = 200 or linestatusCd = 300

你也没有关闭你的<choose>元素。

<xsl:for-each select="message/lines">
    <LINE_SEG>
        <xsl:if test="not(normalize-space(costAmount)) = ''">
        <CSTMS_CST>
          <xsl:value-of select="normalize-space(costAmount)"/>
        </CSTMS_CST>
        </xsl:if>
        <PO_CHANNEL></PO_CHANNEL>
      <xsl:choose>
      <xsl:when test="linestatusCd = 100">
        <RIMSTS>OPEN</RIMSTS>
      </xsl:when>
      <xsl:when test="linestatusCd = 200 or linestatusCd = 300">
        <RIMSTS>CLOSED</RIMSTS>
      </xsl:when>
      </xsl:choose>
   </LINE_SEG>
</xsl:for-each>

推荐阅读