【问题标题】:How to apply if-else on foreach loop using xslt如何使用 xslt 在 foreach 循环上应用 if-else
【发布时间】:2020-03-13 17:03:05
【问题描述】:

我必须使用 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>

【问题讨论】:

  • 请提供minimal reproducible example。从表面上看,您缺少一个结束 &lt;/xsl:choose&gt; 标记。 --附言如果您收到错误消息,明智的做法是逐字重现。

标签: xml xslt xslt-1.0 xslt-2.0


【解决方案1】:
linestatusCd= 200 or 300

看不下去了,你可能是说

linestatusCd = 200 or linestatusCd = 300

你还没有关闭你的 &lt;choose&gt; 元素。

<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>

【讨论】:

  • 我尝试了上述解决方案。哪个正在工作。对于另一种情况,我正在申请其他条件。否则它不起作用。我能知道在 for-each 中使用 when 和 else 的正确方法吗?
  • 是的,你可以知道正确的方法:有很多信息来源(例如书籍)。我们不是专门为您编写新书和教程,我们会在您阅读了这些书但仍然遇到困难时为您提供帮助。如果您的第一个问题已得到解答,而您还有其他问题,请将其作为一个新问题提出,具体说明您做了什么以及它是如何失败的。
  • 另外,请用特定的 XSLT 版本标记您的问题;您同时使用了 1.0 和 2.0 标签,所以我们不知道您使用的是哪个版本。
猜你喜欢
  • 2012-09-02
  • 2022-01-25
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
相关资源
最近更新 更多