ugrás a tartalomhoz

Táblázat generálása for-each-group függvénnyel

minczerl · 2007. Jún. 11. (H), 14.20
Van egy XML-em (Indesign által generált), ahol a táblázat generálásnál elakadtam, nem tudom milyen úton-módon tudom úgy csoportosítani az elemeket hogy a generált táblázatban megfelelően legyenek a rowspan és a colspan elemek. Jelen esetben úgy kell egy újabb tr elemet beszúrni ahol Cell elemek aid:ccols attribútumainak összege egyenlő a Table elem aid:tcols attribútumának értékével. Ha valakinek lenne valami hasznos ötlete ezügyben azt szívesen venném.
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <Table xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/" aid:table="table" aid:trows="7"  
  3.     aid:tcols="3">  
  4.     <Cell aid:table="cell" aid:crows="1" aid:ccols="2">  
  5.         <CellHeading>Situação do Beneficiário</CellHeading>  
  6.     </Cell>  
  7.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="98.93438079914081">  
  8.         <CellHeading>Taxas de Bonificação</CellHeading>  
  9.     </Cell>  
  10.       
  11.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="78.09186111410146">  
  12.         <CellBodyCenter>  
  13.             <CharBold>Idade</CharBold>  
  14.         </CellBodyCenter>  
  15.     </Cell>  
  16.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="78.09186111410146">  
  17.         <CellBodyCenter>  
  18.             <CharBold>Carreira Contributiva (em anos)</CharBold>  
  19.         </CellBodyCenter>  
  20.     </Cell>  
  21.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="98.93438079914081">  
  22.         <CellBodyCenter>  
  23.             <CharBold>Mensal</CharBold>  
  24.         </CellBodyCenter>  
  25.     </Cell>  
  26.       
  27.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="78.09186111410146">  
  28.         <CellBodyCenter>&lt; 65</CellBodyCenter>  
  29.     </Cell>  
  30.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="78.09186111410146">  
  31.         <CellBodyCenter>Condições de Acesso à Pensão sem Penalização</CellBodyCenter>  
  32.     </Cell>  
  33.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="98.93438079914081">  
  34.         <CellBodyCenter>0,65%</CellBodyCenter>  
  35.     </Cell>  
  36.       
  37.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="78.09186111410146">  
  38.         <CellBodyCenter>&gt; 65</CellBodyCenter>  
  39.     </Cell>  
  40.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="78.09186111410146">  
  41.         <CellBodyCenter>15 a 24</CellBodyCenter>  
  42.     </Cell>  
  43.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="98.93438079914081">  
  44.         <CellBodyCenter>0.33%</CellBodyCenter>  
  45.     </Cell>  
  46.       
  47.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="78.09186111410146"/>  
  48.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="78.09186111410146">  
  49.         <CellBodyCenter>25 a 34</CellBodyCenter>  
  50.     </Cell>  
  51.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="98.93438079914081">  
  52.         <CellBodyCenter>0.5%</CellBodyCenter>  
  53.     </Cell>  
  54.       
  55.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="78.09186111410146"/>  
  56.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="78.09186111410146">  
  57.         <CellBodyCenter>35 a 39</CellBodyCenter>  
  58.     </Cell>  
  59.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="98.93438079914081">  
  60.         <CellBodyCenter>0.65%</CellBodyCenter>  
  61.     </Cell>  
  62.       
  63.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="78.09186111410146">  
  64.         <CellBodyCenter>&gt; 65</CellBodyCenter>  
  65.     </Cell>  
  66.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="78.09186111410146">  
  67.         <CellBodyCenter>&gt; 40</CellBodyCenter>  
  68.     </Cell>  
  69.     <Cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="98.93438079914081">  
  70.         <CellBodyCenter>1.0%</CellBodyCenter>  
  71.     </Cell>  
  72.       
 
1

Minőségi követelmények...

minczerl · 2007. Jún. 12. (K), 22.21
Nem ütöttem meg a Weblabor minőségi követelményeit a téma nyitássommal vagy tényleg senkinek semmi ötlete nincs a problémámra?
2

Nem értem

inf · 2007. Jún. 13. (Sze), 02.51
Én speciel nem értem a kérdést :D Fogalmazd újra kérlek, mert ez így nekem zavaros. Ha jól értem, akkor egy ciklussal végigmész egy táblán, és annak a celláit írod át XMLbe, és nem tudsz mit kezdeni a colspannal és a rowspannal?
3

colspan

krey · 2007. Jún. 13. (Sze), 04.13
Szóval... Ha a rowspan nincs akkor a megoldás:
Először megszerzed az aid:tcols értékét és eltárolod egy változóba
Utána végigsöpörsz a cellákon. Eltárolod, hogy hány cella van eddig ebben a sorban. Megnézed, hogyha a következő adagot hozzáadod, akkor mi lesz. Ha kisebb, akkor ugyanez megint, ha egyenlő, akkor új sor, ha nagyobb, akkor error.

üdv. krey

ps. azért amikor parzolod remélem nem hagyod le a </Table>-t :)
pps. és megmondhatnád, h mivel szeretnéd parzolni, mer én még group függvényről nem hallottam... (monjuk for függvényről sem)
4

mégis én hibáztam...

minczerl · 2007. Jún. 13. (Sze), 09.39
Tényleg én voltam a "hunyó", elnézést kihagytam hogy XSLT-vel kellene mindezt megvalósítanom. Na szóval egy olyan transzformációt kell csinálnom erre az XML-re amivel kapok egy HTML táblázatot ügyelve a rowspanra és a colspanra. A xsl:for-each-group függvényre gondoltam mert azzal szépen meglehet csinálni az ilyen csoportosításokat, csak ez egy "speckó" eset és nem tudom hogy miként tudnám az attribútumok összegével megcsinálni ezt a csoportosítást. A google-val sem jutottam előbbre sajnos ezért gondoltam hátha van itt egy XSLT guru aki tudna segíteni előlrébb jutni a problémámba.

Köszönöm, és mégegyszer elnézést a pontatlan kérdésért.
5

Hátha jól jön még valakinek...

minczerl · 2007. Júl. 12. (Cs), 11.16
  1. <xsl:stylesheet version="1.0"  
  2.         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  
  3.         xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/">  
  4.         <xsl:output method="html"/>  
  5.         <xsl:key name="row" match="Cell"  
  6.             use=  
  7.             "  
  8.             concat  
  9.             (  
  10.             generate-id(..),'|',  
  11.             floor  
  12.             (  
  13.             sum(preceding-sibling::Cell/@aid:ccols) div  
  14.             ../@aid:tcols  
  15.             )  
  16.             )  
  17.             "/>  
  18.         <xsl:template match="/">  
  19.             <xsl:element name="html">  
  20.                 <xsl:element name="head">  
  21.                     <xsl:element name="title"/>  
  22.                 </xsl:element>  
  23.                 <xsl:element name="body">  
  24.                     <xsl:apply-templates/>  
  25.                 </xsl:element>  
  26.             </xsl:element>  
  27.         </xsl:template>  
  28.         <xsl:template match="Table">  
  29.             <xsl:element name="table">  
  30.                 <xsl:attribute name="border">1</xsl:attribute>  
  31.                 <xsl:call-template name="rows">  
  32.                     <xsl:with-param name="start" select="0"/>  
  33.                     <xsl:with-param name="end" select="@aid:trows"/>  
  34.                 </xsl:call-template>  
  35.             </xsl:element>  
  36.         </xsl:template>  
  37.         <xsl:template name="rows">  
  38.             <xsl:param name="start"/>  
  39.             <xsl:param name="end"/>  
  40.             <xsl:choose>  
  41.                 <xsl:when test="$start = $end">  
  42.                     <xsl:element name="tr">  
  43.                         <xsl:apply-templates  
  44.                             select=  
  45.                             "  
  46.                             key('row',concat(generate-id(),'|',$start))  
  47.                             "/>  
  48.                     </xsl:element>  
  49.                 </xsl:when>  
  50.                 <xsl:otherwise>  
  51.                     <xsl:variable name="mid"  
  52.                         select="$start + floor(($end - $start) div 2)"/>  
  53.                     <xsl:call-template name="rows">  
  54.                         <xsl:with-param name="start" select="$start"/>  
  55.                         <xsl:with-param name="end" select="$mid"/>  
  56.                     </xsl:call-template>  
  57.                     <xsl:call-template name="rows">  
  58.                         <xsl:with-param name="start" select="$mid + 1"/>  
  59.                         <xsl:with-param name="end" select="$end"/>  
  60.                     </xsl:call-template>  
  61.                 </xsl:otherwise>  
  62.             </xsl:choose>  
  63.         </xsl:template>  
  64.         <xsl:template match="Cell[CellHeading]">  
  65.             <xsl:element name="th">  
  66.                 <xsl:apply-templates select="@aid:ccols"/>  
  67.                 <xsl:apply-templates select="CellHeading/text()"/>  
  68.             </xsl:element>  
  69.         </xsl:template>  
  70.         <xsl:template match="Cell">  
  71.             <xsl:element name="td">  
  72.                 <xsl:apply-templates select="@aid:ccols"/>  
  73.                 <xsl:apply-templates  
  74.                     select=".//text()[normalize-space() != '']"/>  
  75.                 <xsl:if test="normalize-space(.) = ''">&#160;</xsl:if>  
  76.             </xsl:element>  
  77.         </xsl:template>  
  78.         <xsl:template match="##kukac##aid:ccols[. = 1]"/>  
  79.         <xsl:template match="@aid:ccols">  
  80.             <xsl:attribute name="colspan">  
  81.                 <xsl:value-of select="."/>  
  82.             </xsl:attribute>  
  83.         </xsl:template>  
  84.     </xsl:stylesheet>  
Adobe meg kicsit összekaphatná magát hogy valamivel korrektebb XML-t generáljon :(.