XML Stylesheet XSL, множественная структура для одного элемента

0

Это моя часть 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>

Теперь, я хочу написать xsl для этого xml, который мог бы сгладить его как-то вроде ниже:

<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?

благодаря

  • 0
    Вы хотите использовать XSLT 2.0 или 1.0? И хотите ли вы создать одну таблицу для всех данных или одну таблицу для каждой группы record имеющих один и тот же BillNum ?
  • 0
    @MartinHonnen XSLT 1.0, я хочу одну таблицу для каждой группы записей, имеющих один и тот же BillNum.
Теги:
xslt

1 ответ

1
Лучший ответ

Это проблема группировки, которая в XSLT 1.0 решается с помощью группировки Muenchian http://www.jenitennison.com/xslt/grouping/muenchian.xml с ключом

<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>
  • 0
    Это дает правильный формат таблицы в IE, но в Firefox он отображается в простом текстовом формате: ItemPriceGlasses100Book50Shoes500
  • 1
    Ну, я опубликовал фрагменты, которые нужно включить в полную таблицу стилей, которая гарантирует, что браузер знает, что вы создаете вывод HTML, либо <xsl:output method="html"/> туда <xsl:output method="html"/> либо имея шаблон, создающий корень html элемент. Я отредактирую, чтобы показать это также.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню