XML样式表XSL,同一项的多个结构

时间:2014-04-17 16:42:47

标签: html xml xslt

这是我xml的一部分:

<record>
   <BillNum>999</BillNum>
   <Item>Glasses</Item>
   <Price>100</Price>
</record>
<record>
   <BillNum>999</BillNum>
   <Item>Book</Item>
   <Price>50</Price>
</record>
<record>
   <BillNum>999</BillNum>
   <Item>Shoes</Item>
   <Price>500</Price>
</record>

现在,我想为这个xml编写xsl,它的样式可能如下所示:

<table>
        <tr>
            <td>Item</td>
            <td>Price</td>
        </tr>
        <tr>
            <td>Glasses</td>
            <td>100</td>
        </tr>
        <tr>
            <td>Book</td>
            <td>50</td>
        </tr>
        <tr>
            <td>Shoes</td>
            <td>500</td>
        </tr>
</table>

每个BillNum。

请帮帮我,我该如何编写所需的xsl?

由于

1 个答案:

答案 0 :(得分:1)

使用Muenchian分组http://www.jenitennison.com/xslt/grouping/muenchian.xml和密钥解决XSLT 1.0中的分组问题

<xsl:key name="bill" match="record" use="BillNum"/>

<xsl:template match="NameOfParentOfRecordHere">
  <xsl:apply-templates select="record[generate-id() = generate-id(key('bill', BillNum)[1])]" mode="table"/>
</xsl:template>

<xsl:template match="record" mode="table">
<table>
        <tr>
            <td>Item</td>
            <td>Price</td>
        </tr>
        <xsl:apply-templates select="key('bill', BillNum)"/>
</table>
</xsl:template>

<xsl:template match="record">
  <tr>
    <xsl:apply-templates select="Item | Price"/>
  </tr>
</xsl:template>

<xsl:template match="Item | Price">
  <td><xsl:value-of select="."/></td>
</xsl:template>

然后使用类似

的模板设置HTML文档结构
<xsl:template match="/">
  <html>
    <head>
      <title>Example</title>
    </head>
    <body>
      <xsl:apply-templates/>
    </body>
  </html>
</xsl:template>