как взять разные с минимальным значением, используя xslt1.0? - PullRequest
1 голос
/ 11 февраля 2012

Ниже мой xml

<products>
    <product>
        <supplier>1</supplier>
        <item>
            <color>Red</color>
            <name>Pen</name>
            <price>10</price>
        </item>
        <item>
            <color>Green</color>
            <name>Pen</name>
            <price>15</price>
        </item>
        <item>
            <color>Red</color>
            <name>Pen</name>
            <price>5</price>
        </item>
    </product>
    <product>
        <supplier>1</supplier>
        <item>
            <color>White</color>
            <name>Pen</name>
            <price>10</price>
        </item>
        <item>
            <color>Green</color>
            <name>Pen</name>
            <price>18</price>
        </item>
        <item>
            <color>Red</color>
            <name>Pen</name>
            <price>15</price>
        </item>
    </product>
    <product>
        <supplier>2</supplier>
        <item>
            <color>White</color>
            <name>Pen</name>
            <price>5</price>
        </item>
        <item>
            <color>Green</color>
            <name>Pen</name>
            <price>18</price>
        </item>
        <item>
            <color>White</color>
            <name>Pen</name>
            <price>15</price>
        </item>
    </product>
</products>

Мне нужно взять отдельный продукт с минимальной ценой ... используя xslt 1.0

требуемый вывод

<products>
    <product>
        <supplier>1</supplier>
        <item>
            <color>Green</color>
            <name>Pen</name>
            <price>15</price>
        </item>
        <item>
            <color>Red</color>
            <name>Pen</name>
            <price>5</price>
        </item>
        <item>
            <color>White</color>
            <name>Pen</name>
            <price>10</price>
        </item>
    </product>
    <product>
        <supplier>2</supplier>
        <item>
            <color>White</color>
            <name>Pen</name>
            <price>5</price>
        </item>
        <item>
            <color>Green</color>
            <name>Pen</name>
            <price>18</price>
        </item>
    </product>
</products>

надеясь на вашу помощь ---------------------------------------------------------------- --------------------------------------- - ------------------------------------------------------------------- - - ------------------------------

1 Ответ

0 голосов
/ 11 февраля 2012

Использование:

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

  <xsl:key name="s" match="product" use="supplier"/>
  <xsl:key name="k" match="item" use="concat(../supplier, ',', name, ',', color)"/>

  <xsl:template match="/products">
    <xsl:copy>
      <xsl:apply-templates select="product[generate-id() 
                           = generate-id(key('s', supplier))]"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="product">
    <xsl:copy>
      <xsl:copy-of select="supplier"/>
      <xsl:apply-templates select="../product/item[generate-id()
                           = generate-id(key('k', concat(current()/supplier, ',', name, ',', color)))]"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="item">
    <xsl:for-each select="key('k', concat(../supplier, ',', name, ',', color))">
      <xsl:sort select="price" data-type="number"/>
      <xsl:if test="position() = 1">
        <xsl:copy-of select="."/>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...