1

我有以下 XML

<?xml version="1.0" encoding="utf-8"?>

<Order>
    <Bundle>
        <itemList>
            <item>
                <id>1</id>
            </item>
            <item>
                <id>4</id>
            </item>
            <item>
                <id>5</id>
            </item>
        </itemList>
        <itemList>
            <item>
                <id>1</id>
            </item>
            <item>
                <id>3</id>
            </item>
            <item>
                <id>5</id>
            </item>
        </itemList>
        <itemList>
            <item>
                <id>4</id>
            </item>
            <item>
                <id>1</id>
            </item>
            <item>
                <id>3</id>
            </item>
        </itemList>
    </Bundle>
    <item>
        <id>1</id>
        <value>12.00</value>
    </item>
    <item>
        <id>2</id>
        <value>13.00</value>
    </item>
    <item>
        <id>3</id>
        <value>14.00</value>
    </item>
    <item>
        <id>4</id>
        <value>15.00</value>
    </item>
    <item>
        <id>5</id>
        <value>16.00</value>
    </item>
</Order>

尝试转换为以下格式的 html 表格

 --------------------------------
    ItemList - <Totalvalue of items (value in seperate nodes) in ItemList >
    ItemList - <Totalvalue of items (value in seperate nodes) in ItemList >
    ItemList - <Totalvalue of items (value in seperate nodes) in ItemList >

示例结果 -

ItemResult - 44.00  (sum of value of item with id 1 + 4 + 5)
ItemResult - 43.00
etc

这是我开始的 XSL

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
  <html>
  <body>

    <table border="1">

      <xsl:for-each select="Order/Bundle/itemList">
      <tr>
        <td>TotalValue</td>
        <td><xsl:call-template name="priceSum">
    <xsl:with-param name="item" />
  </xsl:call-template> </td>
      </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>

<xsl:template name="priceSum">
  <xsl:param name="item"/>    
     <xsl:value-of select='sum(itemList/item/id/value)'/>
</xsl:template>
</xsl:stylesheet>

我无法获得属于 itemlist 组的那些项目 id 的值的总和。

谢谢你的帮助!!

4

1 回答 1

1

这种转变

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

 <xsl:key name="OrderItemById" match="Order/item" use="id"/>

 <xsl:template match="itemList">
     ItemList - <xsl:value-of select=
      "sum(key('OrderItemById', item/id)/value)"/>
 </xsl:template>
 <xsl:template match="text()"/>
</xsl:stylesheet>

应用于提供的 XML 文档时

<Order>
    <Bundle>
        <itemList>
            <item>
                <id>1</id>
            </item>
            <item>
                <id>4</id>
            </item>
            <item>
                <id>5</id>
            </item>
        </itemList>
        <itemList>
            <item>
                <id>1</id>
            </item>
            <item>
                <id>3</id>
            </item>
            <item>
                <id>5</id>
            </item>
        </itemList>
        <itemList>
            <item>
                <id>4</id>
            </item>
            <item>
                <id>1</id>
            </item>
            <item>
                <id>3</id>
            </item>
        </itemList>
    </Bundle>
    <item>
        <id>1</id>
        <value>12.00</value>
    </item>
    <item>
        <id>2</id>
        <value>13.00</value>
    </item>
    <item>
        <id>3</id>
        <value>14.00</value>
    </item>
    <item>
        <id>4</id>
        <value>15.00</value>
    </item>
    <item>
        <id>5</id>
        <value>16.00</value>
    </item>
</Order>

产生想要的正确结果:

 ItemList - 43
 ItemList - 42
 ItemList - 41
于 2012-07-26T01:43:00.227 回答