[html/XML]Object plaatsing

Pagina: 1
Acties:

  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 30-08 12:12
Als opdracht voor mijn stage moet ik bijna 500 XMLs omzetten naar HTML met 1 XSL. Het betreffen allemaal dialogboxes (schermpjes van een applicatie). Dit is mogelijk doordat alle XMLs gebruik maken van dezelfde structuur en tags.

In de XML-code is de plaatsing van de objects met X / Y coordinaten aangegeven.
code:
1
2
3
4
5
6
7
<POSITION>
      <x>5</x>
      <y>1</y>
    <w>288</w>
    <h>56</h>
    <units>Dialog</units>
</POSITION>

Op het eerste gezicht niks mis mee. Echter ik moet deze XML omzetten naar HTML met XSL. HTML maakt voor plaatsing voor zover ik weet geen gebruik van X / Y coordinaten. Dit vind plaats met tags zoals <center>.

Wat ik al voor elkaar heb gekregen is om alle objecten wel weer te kunnen geven echter het grote probleem blijft het op de juiste plaats zetten. Als het 1 XSL per XML zou zijn zou het makkelijker zijn, gezien ik hem dan zou kunnen aanpassen voor die ene XML. Echter dit gaat niet met 1 XSL voor 500 XMLs!

Het moet met 1 XSL. Weergave is dus geen probleem maar wel de plaatsing van de objecten in alle XMLs met 1 XSL.

Ik buig me hier al heel lang over maar kom er niet uit. Heeft iemand suggesties?

AULXJMHR


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

DIVs? Daarmee kun je absolute plaatsing op grond van x,y-coords bewerkstelligen. Moet je wel een beetje moderne browser-gebruikers hebben.

Rustacean


  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 30-08 12:12
Op woensdag 15 mei 2002 11:52 schreef Manuzhai het volgende:
DIVs? Daarmee kun je absolute plaatsing op grond van x,y-coords bewerkstelligen. Moet je wel een beetje moderne browser-gebruikers hebben.
Met DIVs? Ik heb van die tags gehoord echter nooit mee gewerkt en wist de mogelijkheden daarvan ook niet. Als jij zegt dat je daarmee x,y-coord plaatsing kan doen dan zal dat zeer goed uitkomen. Ik ga het gelijk nakijken. Thnx!

Heb net http://www.dto.tudelft.nl/mirhtml/ gekeken hoe je binnen de DIV-tags met x,y-coord werkt. Echter nergens staat het vermeld en ik kan het ook niet vinden in de Search van GoT. Werkt het dan als volgt?:
code:
1
2
3
4
<DIV>
     <x>256</x>
     <y>64</y>
</DIV>

AULXJMHR


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

De positie van een div kan je het best met een stylesheet (css) vastleggen.

Aangezien dit allemaal om html gaat, verplaats ik het naar W&G.

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Je moet het in de style attrib van de DIV zetten (CSS dus).

Rustacean


  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 30-08 12:12
Zo dus:
code:
1
<div style="position:absolute; left:297px; op:23px;">blabla</div>

Nogmaals dank.

AULXJMHR


  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
code:
1
2
3
<divElement id="divUno" x="100px" y="100px">
  <value>Dit is de inhoud van de div die zal worden weergegeven op left: x & top: y</value>
</divElement>


code:
1
2
3
4
5
6
7
8
9
10
11
12
<xsl:for-each select="divElement">
  <div>
     <xsl:attribute name="id">
     <xsl:value-of select="@id"/>
     </xsl:attribute>
     <xsl:attribute name="style">
       position: absolute; left: <xsl:value-of select="@x"/>; top: <xsl:value-of select="@y"/>;
     </xsl:attribute>
  
     <xsl:value-of select="value"/>
  </div>
</xsl:for-each>


code:
1
2
3
4
5
6
7
8
9
        /\
        |
      100px
        |
 <-100px- +---------+
        |    in   |
        |    ho   |
        |    ud   |
        +---------+

  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 30-08 12:12
Ik heb nu met de <div>tags gewerkt om ieder object (control) te plaatsen op de juiste positie. Echter hij plaatst ze allemaal op de positie van het eerste object!

De code die ik nu heb is als volgt:
XSL
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<body bgcolor="silver" >
            
    <xsl:for-each select="DIALOGS/DIALOG">
        <font face="{FONT/name}">
            <xsl:variable name="Legendcaption" select="CONTROLS/CONTROL[2]/caption"/>
            <xsl:variable name="tempcaption" select="CONTROLS/CONTROL[4]/caption"/>
            <xsl:variable name="tempBgcolor" select="CONTROLS/CONTROL[2]/COLOR/background"/>
            <xsl:variable name="tempColor" select="CONTROLS/CONTROL[2]/COLOR/foreground"/>
                                    
            <xsl:variable name="xCo" select="CONTROLS/CONTROL/POSITION/x"/>
            <xsl:variable name="yCo" select="CONTROLS/CONTROL/POSITION/y"/>
            <xsl:variable name="wI" select="CONTROLS/CONTROL/POSITION/w*2"/>
            <xsl:variable name="hE" select="CONTROLS/CONTROL/POSITION/h*2"/>
                    
            <xsl:for-each select="CONTROLS/CONTROL">
                            
                <xsl:if test="type='Borshade'">
                    <div style="position:absolute; left:{$xCo}px; top:{$yCo}px; width:{$wI}px; height:{$hE}px;">
                    <fieldset>
                    <legend align="center" style="background-color: {$tempBgcolor}; color: {$tempColor}">
                    <xsl:value-of select="$Legendcaption"/></legend>
                    </fieldset>
                    </div>  
                </xsl:if>
                        
                <xsl:if test="type='BorShade'">
                        <div style="position:absolute; left:{$xCo}px; top:{$yCo}px; width:{$wI}px; height:{$hE}px;">
                        <fieldset>
                        </fieldset>
                        </div>
                </xsl:if>
                            
                <xsl:if test="type='button'">
                    <xsl:choose>
                        <xsl:when test="id='OK'">
                            <div style="position:absolute; left:{$xCo}px; top:{$yCo}px; width:{$wI}px; height:{$hE}px;">
                            <input type="submit" value="OK"/>
                            </div>
                        </xsl:when>
                    </xsl:choose>
                </xsl:if>
            </xsl:for-each>
        </font>
    </xsl:for-each>
</body>

XML
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<DIALOGS>
<DIALOG>
<CONTROLS>
<CONTROL>
<type>Borshade</type>
<STYLES>
<style>Visible</style>
<style>Group</style>
<style>Border</style>
<style>Etched</style>
</STYLES>
<POSITION>
<x>5</x>
<y>1</y>
<w>288</w>
<h>56</h>
<units>Dialog</units>
</POSITION>
<SCALING>
<scalable>XY</scalable>
<anchor>TopLeft</anchor>
</SCALING>
</CONTROL>
<CONTROL>
<caption>EPD Gebruiker</caption>
<type>Static</type>
<STYLES>
<style>Visible</style>
</STYLES>
<POSITION>
<x>119</x>
<y>1</y>
<w>61</w>
<h>9</h>
<units>Dialog</units>
</POSITION>
<COLOR>
<foreground>white</foreground>
<background>blue</background>
</COLOR>
<FORMAT>
<alignment>Center</alignment>
</FORMAT>
<SCALING>
<scalable>X</scalable>
<anchor>TopLeft</anchor>
</SCALING>
</CONTROL>
<CONTROL>
<type>BorShade</type>
<STYLES>
<style>Visible</style>
<style>Group</style>
<style>Border</style>
<style>Etched</style>
</STYLES>
<POSITION>
<x>10</x>
<y>14</y>
<w>276</w>
<h>39,5</h>
<units>Dialog</units>
</POSITION>
<SCALING>
<scalable>XY</scalable>
<anchor>TopLeft</anchor>
</SCALING>
</CONTROL>
<CONTROL>
<caption>OK</caption>
<name>OK</name>
<type>button</type>
<id>OK</id>
<STYLES>
<style>Visible</style>
<style>Tabstop</style>
</STYLES>
<POSITION>
<x>297</x>
<y>5</y>
<w>40</w>
<h>14</h>
<units>Dialog</units>
</POSITION>
<COLOR/>
<PROCESSINGFLAGS>
<flag>OnValidate</flag>
</PROCESSINGFLAGS>
<FORMAT/>
<tooltip>Druk op deze knop,\nals u klaar bent met invoeren\nen de gegevens wilt verwerken</tooltip>
</CONTROL>

Ik heb ook geprobeert om de <div>tag eenmaal er in te zetten dus direct na <xsl:for-each select="CONTROLS/CONTROL"> maar ook dit werkte niet. Gefrustreerd wordt ik ervan |:(

AULXJMHR


  • RM-rf
  • Registratie: September 2000
  • Laatst online: 11:04

RM-rf

1 2 3 4 5 7 6 8 9

code:
1
2
3
4
5
6
<xsl:variable name="xCo" select="CONTROLS/CONTROL/POSITION/x"/>
<xsl:variable name="yCo" select="CONTROLS/CONTROL/POSITION/y"/>
<xsl:variable name="wI" select="CONTROLS/CONTROL/POSITION/w*2"/>
<xsl:variable name="hE" select="CONTROLS/CONTROL/POSITION/h*2"/>
                              
<xsl:for-each select="CONTROLS/CONTROL">

je wijst de xsl:variables (xCo en yCo) toe na de for-each van DIALOGS, daarna komt ook nog een for-each voor ieder separaat CONTROLS, zet die xsl:variabele toewijzing na de tweede for-each

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • DPhoenix
  • Registratie: Februari 2001
  • Laatst online: 30-08 12:12
Bedankt, ik kan weer even vooruit. Het werkt nog niet helemaal perfect maar er zit weer schot in de zaak. Keep ya posted als er verbeteringen zijn ;)

AULXJMHR

Pagina: 1