TrueColor: Koordinaten --> Karte in Form einer Tabelle

Hallo Leute,

wie kann ich ein Koordinaten-Set wie z.B.:

  
  
<map>  
  
<region x="1" y="A" />  
<region x="2" y="A" />  
<region x="3" y="A" />  
<region x="4" y="A" />  
  
<region x="1" y="B" />  
<region x="2" y="B" />  
<region x="3" y="B" />  
<region x="4" y="B" />  
[...]  
  

in eine Tabelle nach folgendem Muster transformieren?

(1;A)(2;A)(3;A)(4;A)
(1;B)(2;B)(3;B)(4;B)
(1;C)(2;C)(3;C)(4;C)
[...]

Ich habe keine Idee mehr, was ich noch versuchen soll.

Ich habe mal die Früchte meiner bisherigen Versuche (die 3 Dateien DTD, XML, XSL) als ZIP verlinkt.

Besten Dank im Voraus.

CU/TC

  1. wie kann ich ein Koordinaten-Set wie z.B.:

    <region x="1" y="A" />
    <region x="2" y="A" />
    <region x="3" y="A" />
    <region x="4" y="A" />

    in eine Tabelle nach folgendem Muster transformieren?

    (1;A)(2;A)(3;A)(4;A)
    (1;B)(2;B)(3;B)(4;B)
    (1;C)(2;C)(3;C)(4;C)
    [...]

    <xsl:transform version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
    <xsl:output method = 'text'/>

    <xsl:template match = 'text()' />

    <xsl:template match = 'region'>
      xsl:text(</xsl:text>
      <xsl:value-of select='@x'/>
      xsl:text;</xsl:text>
      <xsl:value-of select='@y'/>
      xsl:text)</xsl:text>
      <xsl:if test = 'count(preceding-sibling::region) mod 4 = 3'>
        xsl:text&#xa;</xsl:text>
      </xsl:if>
    </xsl:template>

    </xsl:transform>

    Das leere Template für text() lässt sich durch ein geeignetes übergeordnetes Template mit einem entsprechenden xsl:apply-templates natürlich umgehen und es gibt natürlich auch andere Wege zum gewünschten Ziel...

    1. Hallo Björn,

      danke für deine Antwort.

      wie kann ich ein Koordinaten-Set [...]
      in eine Tabelle nach folgendem Muster transformieren?

      (1;A)(2;A)(3;A)(4;A)
      (1;B)(2;B)(3;B)(4;B)
      (1;C)(2;C)(3;C)(4;C)
      [...]

      [...]
        <xsl:if test = 'count(preceding-sibling::region) mod 4 = 3'>
          xsl:text&#xa;</xsl:text>
        </xsl:if>
      [...]

      Mein Priblem ist aber, das muss variabel sein, denn die Tabelle muss sowohl horizontal als auch vertikal erweiterbar sein. Die Karte wird soll erweitert werden. Im Moment hab ich mir schon soweit geholfen, dass ich zumindest alle, auch leere Felder in der XML definiere, damit ein komplettes Rechteck drauswird und somit alle Zellen verfügbar sind. (schwieriges Problem)

      [...] und es gibt natürlich auch andere Wege zum gewünschten Ziel...

      Kennst du noch andere gute Varianten? *neugierig schaut*

      CU/TC

      p.s.: Bekommt man hier keine Benachrichtigungsmail, wenn auf den Beitrag geantwortet wurde?

      1. wie kann ich ein Koordinaten-Set [...]
        in eine Tabelle nach folgendem Muster transformieren?

        (1;A)(2;A)(3;A)(4;A)
        (1;B)(2;B)(3;B)(4;B)
        (1;C)(2;C)(3;C)(4;C)
        [...]

        [...]
          <xsl:if test = 'count(preceding-sibling::region) mod 4 = 3'>
            xsl:text&#xa;</xsl:text>
          </xsl:if>
        [...]

        Mein Priblem ist aber, das muss variabel sein, denn die Tabelle muss sowohl horizontal als auch vertikal erweiterbar sein.

        Das verstehe ich nicht, inwiefern soll die Tabelle "erweiterbar" sein? Wer soll sie wie erweitern können? Was tut meine Lösung, die das verhindert?

        Die Karte wird soll erweitert werden.

        ?

        Im Moment hab ich mir schon soweit geholfen, dass ich zumindest alle, auch leere Felder in der XML definiere, damit ein komplettes Rechteck drauswird und somit alle Zellen verfügbar sind.

        Hm. Willst du nicht 4er-Gruppen haben, sondern anhand des y-Attributs gruppieren, oder wie soll ich das verstehen?

        Kennst du noch andere gute Varianten? *neugierig schaut*

        Ich weiss ja nicht, welches Problem du hast...

        p.s.: Bekommt man hier keine Benachrichtigungsmail, wenn auf den Beitrag geantwortet wurde?

        Das ist nicht vorgesehen, nein. Ich bekomme mit 250+ mails auch genug / Tag...

        1. Hallo Björn,

          Ich weiss ja nicht, welches Problem du hast...

          Er wollte eine Grupierung aufgrund des y-attributes, wobei bei der Darstellung sowohl eine horizontale (1,2,3,4,...,n,) als auch eine vertikale (a,b,c,..,z) "Erweiterbarkeit" berücksichtigt werden sollte.

          Grüße
          Thomas

        2. Mein Priblem ist aber, das muss variabel sein, denn die Tabelle muss sowohl horizontal als auch vertikal erweiterbar sein.

          Das verstehe ich nicht, inwiefern soll die Tabelle "erweiterbar" sein? Wer soll sie wie erweitern können? Was tut meine Lösung, die das verhindert?

          genau wie Thomas schon beschrieben hat. Die Tabelle soll sowohl in der Anzahl der Spalten, als auch in der Anzahl der Zeilen erweiterbar sein. Und das nur über entsprechende Einträge in der HTML (also der x- und der y-Attribute)

          Die Karte wird soll erweitert werden.

          Die Tabelle soll eine Karte darstellen. Und je nach erkundetem Gebiet stellt sie mehr oder weniger dar.

          Im Moment hab ich mir schon soweit geholfen, dass ich zumindest alle, auch leere Felder in der XML definiere, damit ein komplettes Rechteck drauswird und somit alle Zellen verfügbar sind.

          Hm. Willst du nicht 4er-Gruppen haben, sondern anhand des y-Attributs gruppieren, oder wie soll ich das verstehen?

          Hmm.. nein, ich hab mich wohl etwas missverständlich ausgedrückt, sorry. _Eigentlich_ wäre es schön gewesen, ich müsste in der XML keine leeren Container halten, aber ein Datenfeld, welches etwa so aussieht:

          O O
          O O O O
          O O O O
            O O
              O

          ließe sich schwer transformieren, da ja auch die leeren Zellen, also, wo keine Daten existieren, erzeugt werden müssen.

          Kennst du noch andere gute Varianten? *neugierig schaut*

          Ich weiss ja nicht, welches Problem du hast...

          Vielleicht hab ich mich ja jetzt etwas besser ausgedrückt *hofft das*

          p.s.: Bekommt man hier keine Benachrichtigungsmail, wenn auf den Beitrag geantwortet wurde?

          Das ist nicht vorgesehen, nein.

          Hmm... schade, musste schon ewig weit zurückscrollen, morgen, so gehe ich davon aus, wird es schon schwer, das Thema überhaupt wiederzufinden.

          Ich bekomme mit 250+ mails auch genug / Tag...

          Mal einiges davon in den Mülleimer filtern *g*

          Besten Dank für deine Mühe

          CU/TC

      2. Hallo,

        Mein Priblem ist aber, das muss variabel sein, denn die Tabelle muss sowohl horizontal als auch vertikal erweiterbar sein. Die Karte wird soll erweitert werden.

        so geht das:
        --------------
        <?xml version="1.0" encoding="iso-8859-1" ?>
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:key name="gruppe" match="region" use="@y"/>

        <xsl:template match="/map">

        <html>
          <head>
           <link rel="stylesheet" type="text/css" href="" />
          </head>
          <body>
         <!-- Beginn: Karte (Tabelle)-->
           <table border="1">
              <xsl:for-each select="region[generate-id() = generate-id(key('gruppe', @y)[1])]">
                 <tr>
                    <xsl:for-each select="key('gruppe', @y)">
                       <td><xsl:value-of select="@x" />;<xsl:value-of select="@y" /></td>
                    </xsl:for-each>
                 </tr>
              </xsl:for-each>
           </table>
           <!-- Ende: Karte (Tabelle) -->

        </body>
         </html>
        </xsl:template>
        </xsl:stylesheet>

        ---------------------

        Grüße
        Thomas

        1. Hallo Thomas,

          Mein Priblem ist aber, das muss variabel sein, denn die Tabelle muss sowohl horizontal als auch vertikal erweiterbar sein. Die Karte wird soll erweitert werden.

          [kompletter Code]

          Ui, danke dir erstmal. Werde ich morgen gleich mal ausprobieren. Kann leider jetzt noch nichts dazu sagen, denn mit key() und generate-id habe ich mich noch nicht beschäftig. Zumindest sieht es erstmal sehr symphatisch, weil kompakt, aus.

          CU/TC