0

鉴于此 XML

    <ContentBlock>
    <Content>
        <QuickStatus Balance="0" Credits="0" Trolley="600" Delivery="100" Available="-700" Pending="0" />
        <TrolleyItems>
            <TrolleyItem Description="Test Item 1" value="150" />
            <TrolleyItem Description="Test Item 2" value="150" />
            <TrolleyItem Description="Test Item 3" value="300" />
        </TrolleyItems>
    </Content>
</ContentBlock>

我需要检查每个手推车项目的值属性是否低于 800,然后如果至少有一个项目低于 800,则显示最终交付属性。但只需要显示一次交付值。

我的 XSLT .xsl 文件代码如下所示。

<xsl:for-each select="Content/TrolleyItems/TrolleyItem">
    <xsl:if test="ContentBlock/Content/TrolleyItems/TrolleyItem/@value &lt; 800">
        <tr style="border-bottom: 1px dashed #000;">
            <xsl:for-each select="Content/Final">
            <td>Delivery Fee</td><td><xsl:value-of select="@Delivery"/></td>
            </xsl:for-each>
        </tr>
        </xsl:if>
        </xsl:for-each>

我需要的是为@Delivery 属性输出一项。

它只会显示一次,例如答案是:“Delivery Costs: 100”。所以只在物品价值低于800时才收取运费

![在此处输入图像描述][1]

谢谢您的帮助。

4

1 回答 1

1

内部xsl:ifxsl:for-each应该有完整的路径。

中的所有节点xsl:for-each都相对于 中的 xpath select,并且因为您使用的是相对路径(它们不以/or开头//),所以您正在寻找

Content/TrolleyItems/TrolleyItem/ContentBlock/Content/TrolleyItems/TrolleyItem

我认为你正在寻找的是这样的东西......

<xsl:for-each select="Content/TrolleyItems/TrolleyItem[@value">
  <xsl:if test="./@value &lt; 800">
    <tr style="border-bottom: 1px dashed #000;">
      <xsl:for-each select="/Content/Final">
        <td>Delivery Fee</td><td><xsl:value-of select="@Delivery"/></td>
      </xsl:for-each>
    </tr>
  </xsl:if>
</xsl:for-each>

请参阅此 xmlplayground进行现场演示

更新

更有效率...

<xsl:for-each select="Content/TrolleyItems/TrolleyItem[@value &lt; 800]">
  <tr style="border-bottom: 1px dashed #000;">
    <xsl:for-each select="/Content/Final">
      <td>Delivery Fee</td><td><xsl:value-of select="@Delivery"/></td>
    </xsl:for-each>
  </tr>
</xsl:for-each>

更新

根据 OP 的评论,可能更像这样(请记住,我假设您的实际 XML 将比您当前显示的要复杂得多,因此这可能不是您正在寻找的内容)。 ..

<xsl:if test="Content/TrolleyItems/TrolleyItem/@value &lt; 800">
  <tr style="border-bottom: 1px dashed #000;">
    <td>Delivery Fee</td><td><xsl:value-of select="/Content/Final/@Delivery"/></td>
  </tr>
</xsl:if>
于 2012-07-14T19:54:06.703 回答