Итого по XSLT и Итого - PullRequest
       0

Итого по XSLT и Итого

2 голосов
/ 23 июля 2011

Это мой XML:

<Forms>
  <Form PRONME="Air Prospect 2" PPRONME="0" TBONUSP="1000" NACRES="2" />
  <Form PRONME="Air Prospect 2" PPRONME="0" TBONUSP="1000" NACRES="2" />
  <Form PRONME="Air Prospect 2" PPRONME="0" TBONUSP="1000" NACRES="2" LDATE="Jul" />
  <Form PRONME="Air Prospect Name" PPRONME="0" NACRES="1" />
  <Form PRONME="Air Prospect Name" PPRONME="0" TBONUSP="1000" NACRES="1" />
  <Total PRONME="Air Prospect 2" PPRONME="0" TBONUSP="3000"  NACRES="6" />
  <Total PRONME="Air Prospect Name" PPRONME="0" NACRES="2" TBONUSP="1000"  />
</Forms>

Я хочу напечатать элементы формы в одну группу, после чего я хочу напечатать сумму этой группы, например:

<Form PRONME="Air Prospect 2" PPRONME="0" TBONUSP="1000" NACRES="2" />
<Form PRONME="Air Prospect 2" PPRONME="0" TBONUSP="1000" NACRES="2" />
<Form PRONME="Air Prospect 2" PPRONME="0" TBONUSP="1000" NACRES="2" LDATE="Jul" />

после прочтения этой группы я хочу напечатать

<Total PRONME="Air Prospect 2" PPRONME="0" TBONUSP="3000"  NACRES="6" />

Основываясь на ПРОДВИЖЕНИИ, я хочу сгруппировать ... Используя XSLT 1.0

Ответы [ 2 ]

3 голосов
/ 23 июля 2011

Для отображения в формате HTML вы можете использовать этот шаблон:

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

  <xsl:key name="k" match="Form" use="@PRONME"/>

  <xsl:template match="/">
    <html>
      <head>
        <style type="text/css">td,th{border:1px solid black}</style>
      </head>
      <table style="border:solid 1px black;border-collapse:collapse">
        <tr>
          <th>PRONME</th>
          <th>PPRONME</th>
          <th>TBONUSP</th>
          <th>NACRES</th>
        </tr>
        <xsl:apply-templates select="*/Form[generate-id(.) = generate-id(key('k', @PRONME))]"/>
      </table>
    </html>
  </xsl:template>

  <xsl:template match="Form">
    <tr>
      <td>
        <xsl:value-of select="@PRONME"/>
      </td>
      <td>
        <xsl:value-of select="@PPRONME"/>
      </td>
      <td>
        <xsl:value-of select="sum(//Form[@PRONME = current()/@PRONME]/@TBONUSP)"/>
      </td>
      <td>
        <xsl:value-of select="sum(//Form[@PRONME = current()/@PRONME]/@NACRES)"/>
      </td>
    </tr>

  </xsl:template>

</xsl:stylesheet>

Вывод:

enter image description here

XSLT:

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

  <xsl:template match="/">
    <html>
      <head>
        <style type="text/css">td,th{border:1px solid black}</style>
      </head>
      <table style="border:solid 1px black;border-collapse:collapse">
        <tr>
          <th>PRONME</th>
          <th>PPRONME</th>
          <th>TBONUSP</th>
          <th>NACRES</th>
        </tr>
        <xsl:apply-templates select="*/Total"/>
      </table>
    </html>
  </xsl:template>

  <xsl:template match="Total">
    <xsl:apply-templates select="//Form[@PRONME = current()/@PRONME]"/>

    <tr style="color:red">
      <td>
        <xsl:value-of select="@PRONME"/>
      </td>
      <td>
        <xsl:value-of select="@PPRONME"/>
      </td>
      <td>
        <xsl:value-of select="@TBONUSP"/>
      </td>
      <td>
        <xsl:value-of select="@NACRES"/>
      </td>
    </tr>
  </xsl:template>


  <xsl:template match="Form">

      <tr>
        <td>
          <xsl:value-of select="@PRONME"/>
        </td>
        <td>
          <xsl:value-of select="@PPRONME"/>
        </td>
        <td>
          <xsl:value-of select="@TBONUSP"/>
        </td>
        <td>
          <xsl:value-of select="@NACRES"/>
        </td>
      </tr>

  </xsl:template>

</xsl:stylesheet>

Результат:

enter image description here

2 голосов
/ 23 июля 2011

Вы можете использовать этот XSLT:

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

  <xsl:key name="k" match="Form" use="@PRONME"/>

  <xsl:template match="/">
    <xsl:apply-templates select="*/Form[generate-id(.) = generate-id(key('k', @PRONME))]"/>
  </xsl:template>

  <xsl:template match="Form">
    <Total PRONME="{@PRONME}" PPRONME="{@PPRONME}" 
           TBONUSP="{sum(//Form[@PRONME = current()/@PRONME]/@TBONUSP)}"
           NACRES="{sum(//Form[@PRONME = current()/@PRONME]/@NACRES)}"/>
  </xsl:template>

</xsl:stylesheet>

Выход:

<Total PRONME="Air Prospect 2" PPRONME="0" TBONUSP="3000" NACRES="6" />
<Total PRONME="Air Prospect Name" PPRONME="0" TBONUSP="1000" NACRES="2" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...