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 未満かどうかを確認し、少なくとも 1 つのアイテムが 800 未満である場合は最終配送属性を表示する必要があります。ただし、配送値を表示する必要があるのは 1 回だけです。

私の 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 属性の 1 つのアイテムを出力することです。

1 回だけ表示されます。たとえば、「配送費用: 100」という回答が表示されます。そのため、アイテムの値が 800 未満の場合にのみ配送料が請求されます

![ここに画像の説明を入力][1]

助けてくれてありがとう。

4

1 に答える 1

1

内側xsl:ifxsl:for-each完全なパスを持つべきではありません。

内のすべてのノードは、 内xsl:for-eachの xpath に対してselect相対的です。相対パスを使用しているため (または で始まらない/) //、探しているのは

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 に答える