Как отсортировать группу узлов в одну строку, используя xsl? - PullRequest
1 голос
/ 18 февраля 2012

ниже мой xml

<products>
    <product>
        <item>Pen</item>
        <price>10</price>
    </product>
    <product>
        <item>Pencil</item>
        <price>20</price>
    </product>
    <product>
        <item>Bag</item>
        <price>25</price>
    </product>
</products>

мне нужен вывод, как показано ниже

product_name       price     remark
Pen                10        Pen+Pencil+Bag
Pencil             20        Pen+Pencil+Bag
Bag                25        Pen+Pencil+Bag

Как мне сделать remark как группу в xslt 1.0

1 Ответ

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

Это преобразование :

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

 <xsl:variable name="vSortedNames">
  <xsl:call-template name="sortedItemList"/>
 </xsl:variable>

 <xsl:template match="/*">
  <xsl:text>product_name&#9;price&#9;remark</xsl:text>

  <xsl:apply-templates select="*">
   <xsl:sort select="price" data-type="number"/>
  </xsl:apply-templates>
 </xsl:template>

 <xsl:template match="product">
  <xsl:value-of select=
  "concat('&#xA;', item, '&#9;', price, '&#9;', $vSortedNames)"/>
 </xsl:template>

 <xsl:template name="sortedItemList">
  <xsl:for-each select="/*/product">
   <xsl:sort select="price" data-type="number"/>
  <xsl:if test="not(position() = 1)">+</xsl:if>
   <xsl:value-of select="item"/>
  </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

при применении к предоставленному XML-документу :

<products>
    <product>
        <item>Pen</item>
        <price>10</price>
    </product>
    <product>
        <item>Pencil</item>
        <price>20</price>
    </product>
    <product>
        <item>Bag</item>
        <price>25</price>
    </product>
</products>

создает искомое, правильный результат :

product_name    price   remark
Pen 10  Pen+Pencil+Bag
Pencil  20  Pen+Pencil+Bag
Bag 25  Pen+Pencil+Bag
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...