0

次のような入力XMLが与えられます。

<foodGroup>
    <fruit>
        <label>Apple</label>
        <value>1</value>
    </fruit>
    <fruit>
        <label>Banana</label>
        <value>2</value>
    </fruit>
    <vegetable/>
</foodGroup>

label='Orange'およびvalue=non0のフルーツが存在するかどうかをチェックするXSL変換は何でしょうか。そして、欠落している場合は、fruit/labelおよびfruit/value構造を出力に追加します。

このようなもの:

<foodGroup>
    <fruit>
        <label>Apple</label>
        <value>1</value>
    </fruit>
    <fruit>
        <label>Banana</label>
        <value>2</value>
    </fruit>
    <fruit>
        <label>Orange</label>
        <value>3</value>
    </fruit>
    <vegetable />
</foodGroup>
4

1 に答える 1

0

関連するテストは<xsl:if test="not(fruit[label = 'Orange' and value != 0])">です。

次のXSLTは、要求した結果を提供します。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:output method="xml" indent="yes"/>

  <!-- Identity transform -->
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="foodGroup">
    <xsl:copy>
      <xsl:apply-templates />
      <xsl:if test="not(fruit[label = 'Orange' and value != 0])">
        <fruit>
          <label>Orange</label>
          <value><xsl:value-of select="count(fruit) + 1"/></value>
        </fruit>
      </xsl:if>      
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

これは、果物の値を毎回1ずつ増やしたいことを前提としています。それが正しい仮定ではない場合は、追加されたオレンジにどのような値を持たせたいかを指定してください。

于 2012-09-27T03:37:46.323 に答える