Как отсортировать минимальное значение, используя xslt? - PullRequest
0 голосов
/ 16 февраля 2012

ниже - мой xml-файл с именем test.xml

<products>
    <supplier>
        <supplierid>1001</supplierid>
        <totalprice>30</totalprice>
        <items>
            <item>Pen</item> 
            <price>10</price>
        </items>
        <items>
            <item>Pencil</item> 
            <price>5</price>
        </items>
        <items>
            <item>Bag</item> 
            <price>15</price>
        </items>
    </supplier>
    <supplier>
        <supplierid>1001</supplierid>
        <totalprice>23</totalprice>
        <items>
            <item>Pencil</item> 
            <price>8</price>
        </items>
        <items>
            <item>Pen</item> 
            <price>5</price>
        </items>
        <items>
            <item>Bag</item> 
            <price>10</price>
        </items>        
    </supplier>
    <supplier>
        <supplierid>1001</supplierid>
        <totalprice>24</totalprice>
        <items>
            <item>Paper Box</item> 
            <price>7</price>
        </items>
        <items>
            <item>Pen</item> 
            <price>4</price>
        </items>
        <items>
            <item>Bag</item> 
            <price>13</price>
        </items>
    </supplier>
    <supplier>
        <supplierid>1002</supplierid>
        <totalprice>26</totalprice>
        <items>
            <item>Sharpner Box</item> 
            <price>7</price>
        </items>
        <items>
            <item>Pen</item> 
            <price>4</price>
        </items>
        <items>
            <item>Bag</item> 
            <price>15</price>
        </items>
    </supplier>
</products>

Мне нужно взять вывод, как показано ниже, используя xsl 1.0 или 2.0

<products>
    <supplier>
        <supplierid>1001</supplierid>
        <totalprice>23</totalprice>
        <items>
            <item>Pencil</item> 
            <price>8</price>
        </items>
        <items>
            <item>Pen</item> 
            <price>5</price>
        </items>
        <items>
            <item>Bag</item> 
            <price>10</price>
        </items>        
    </supplier>
    <supplier>
        <supplierid>1001</supplierid>
        <totalprice>24</totalprice>
        <items>
            <item>Paper Box</item> 
            <price>7</price>
        </items>
        <items>
            <item>Pen</item> 
            <price>4</price>
        </items>
        <items>
            <item>Bag</item> 
            <price>13</price>
        </items>
    </supplier>
    <supplier>
        <supplierid>1002</supplierid>
        <totalprice>26</totalprice>
        <items>
            <item>Sharpner Box</item> 
            <price>7</price>
        </items>
        <items>
            <item>Pen</item> 
            <price>4</price>
        </items>
        <items>
            <item>Bag</item> 
            <price>15</price>
        </items>
    </supplier>
</products>
  1. Сортировать меньшую цену от "тех же поставщиков", например <supplierid>1001</supplierid>
  2. На основе этих подузлов <items>
  3. 1001/23 и 1001/30 - то же самое, что и там <items><item>. нам нужно удалить 1001/30 из списка. потому что это высокая цена

Ответы [ 2 ]

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

Это будет сначала сортироваться на основе supplierid, а во-вторых на основе их totalprice

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()">
                <xsl:sort select="supplierid"/>  <!-- 1st level sorting -->
                <xsl:sort select="totalprice"/>  <!-- 2nd level sorting -->
                <xsl:sort select="price"/>       <!-- 3rd level sorting -->
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Примечание: Вы можете использовать бесплатный онлайн-инструмент под названием Online XSLT Test Tool для проверки ваших файлов xml / xslt.

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

Исходя из предположения, что вам нравится сортировать поставщиков по их общей цене:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
<xsl:template match="/">
<products>
  <xsl:for-each select="products/supplier">  
    <xsl:sort select="totalprice" data-type="number" order="ascending"/>  
      <xsl:copy-of select="."/>  
  </xsl:for-each> 
</products>
</xsl:template>
</xsl:transform>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...