Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   [XML] for-each Schleife (https://www.delphipraxis.net/80130-%5Bxml%5D-each-schleife.html)

Luckie 3. Nov 2006 10:48


[XML] for-each Schleife
 
Ich habe folgende Schleife:
XML-Code:
          <xsl:for-each select="Kontakt">
          <xsl:sort select="concat(Name, Vorname)"/>
            <!-- für den Fall, dass es mehrere identische Namen gibt
                 wird noch die aktuelle Position in die Sprungmarke
                 eingefügt -->
            <a href="#{Vorname}_{Name}:{position()}">
              <xsl:value-of select="Name"/>*<xsl:value-of select="Vorname"/></a>**<xsl:value-of select="Firma"/>
           


          </xsl:for-each>
Wäre es möglich diese so umzubauen, dass nicht nach jedem Eintrag ein Zeilenumbruch erfolgt, sondern nur nach jedem fünften oder so?

Neuromancer 3. Nov 2006 10:58

Re: [XML] for-each Schleife
 
Hi Luckie,
Zitat:

Zitat von Luckie
Wäre es möglich diese so umzubauen, dass nicht nach jedem Eintrag ein Zeilenumbruch erfolgt, sondern nur nach jedem fünften oder so?

Jo, schau dir mal "xsl:if" in Kombination mit " test="position()=5" " an.

Gruß

sakura 3. Nov 2006 11:06

Re: [XML] for-each Schleife
 
Zitat:

Zitat von Neuromancer
Jo, schau dir mal "xsl:if" in Kombination mit " test="position()=5" " an.

Nicht ganz, da das nur das 5. Element erreicht, aber nicht jedes 5. ;)
XML-Code:
<xsl:if test="position() mod 5 = 0">
   <hr />
</xsl:if>
@Luckie: Die Überschrift sollte aber [XSL] und nicht [XML] enthalten ;)

...:cat:...

Neuromancer 3. Nov 2006 11:10

Re: [XML] for-each Schleife
 
Zitat:

Zitat von sakura
Nicht ganz, da das nur das 5. Element erreicht, aber nicht jedes 5. ;)
XML-Code:
<xsl:if test="position() mod 5 = 0">
   <hr />
</xsl:if>

Nicht ganz, denn er will ja einen Zeilenumbruch und keine Line... ;) also
statt <hr />.

Aber du hast natürlich vollkommen recht. Thank God it's friday... ;)
(Auf dem Nachhauseweg ist mir der Fehler auch eingefallen...)

Gruß

Luckie 3. Nov 2006 11:38

Re: [XML] for-each Schleife
 
Perfekt. Nur warum werden die Attribute für <td> nicht berücksichtigt:
XML-Code:
<table>
          <xsl:for-each select="Kontakt">
          <xsl:sort select="concat(Name, Vorname)"/>
            <!-- für den Fall, dass es mehrere identische Namen gibt
                 wird noch die aktuelle Position in die Sprungmarke
                 eingefügt -->
            <td>
            <xsl:attribute name="border-width">1px</xsl:attribute>
            <xsl:attribute name="border-style">solid</xsl:attribute>
       <a href="#{Vorname}_{Name}:{position()}">
              <xsl:value-of select="Name"/> <xsl:value-of select="Vorname"/></a> <xsl:value-of select="Firma"/></td>
          <xsl:if test="position() mod 5 = 0">
              <tr />
            </xsl:if>
          </xsl:for-each>
          </table>
Und noch was:
XML-Code:
      <xsl:apply-templates select="Kontakt">
        <xsl:sort select="concat(Name, Vorname)"/>
      </xsl:apply-templates>
Wie kann ich das gleiche hier erreichen? Kontakt sieht so aus:
XML-Code:
<xsl:template match="Kontakt">
  <dl>
    <dt>



      <a name="{Vorname}_{Name}:{position()}" id="{Vorname}_{Name}:{position()}">
        [b]<xsl:value-of select="Name"/>*<xsl:value-of select="Vorname"/>**<xsl:value-of select="Firma"/>[/b]
      </a>
    </p></dt>
    <dd>

<xsl:value-of select="Strasse"/>


      <xsl:value-of select="PLZ"/> <xsl:value-of select="Ort"/>


      <xsl:if test="Land!=''"><xsl:value-of select="Land"/>
</xsl:if>
      <xsl:if test="GebDat!=''">Geburtsdatum: <xsl:value-of select="GebDat"/>
</xsl:if>
      <xsl:if test="Telefon1!=''">Tel. <xsl:value-of select="Telefon1"/>
</xsl:if>
      <xsl:if test="Telefon2!=''">Tel. <xsl:value-of select="Telefon2"/>
</xsl:if>
      <xsl:if test="Fax!=''">Fax: <xsl:value-of select="Fax"/>
</xsl:if>
      <xsl:if test="EMail1!=''">
        [email="{EMail1}"]<xsl:value-of select="EMail1"/>[/email]


      </xsl:if>
      <xsl:if test="EMail2!=''">
        [email="{EMail2}"]<xsl:value-of select="EMail2"/>[/email]


      </xsl:if>
      <xsl:if test="URL!=''">
        [url="{URL}"]<xsl:value-of select="URL"/>[/url]


      </xsl:if>
    
    </p></dd>
  </dl>

 
  <xsl:if test="position()!=last()">
   


</p>
  </xsl:if>
</xsl:template>

marabu 3. Nov 2006 11:44

Re: [XML] for-each Schleife
 
Hallo Michael,

wenn du mit <xsl:element name="td"> arbeitest, dann wird es funktionieren.

Grüße vom marabu

Neuromancer 3. Nov 2006 11:46

Re: [XML] for-each Schleife
 
Zitat:

Zitat von Luckie
Perfekt. Nur warum werden die Attribute für <td> nicht berücksichtigt:

Ich glaube, du mischst hier "normales" HTML mit CSS.
Probier mal folgendes:
XML-Code:
<xsl:attribute name="style">border:1px solid black;</xsl:attribute>
ungetestet.

Gruß

Luckie 3. Nov 2006 11:51

Re: [XML] for-each Schleife
 
Geht. Nur bei der Tabelle ignoriert er das collapse:
XML-Code:
<table>
<xsl:attribute name="style">border:1px solid black collapse;</xsl:attribute>

Neuromancer 3. Nov 2006 11:51

Re: [XML] for-each Schleife
 
Zitat:

Zitat von marabu
wenn du mit <xsl:element name="td"> arbeitest, dann wird es funktionieren.

Hallo marabu,

hat denn <xsl:element> bei <xsl:output method="HTML" /> überhaupt eine Wirkung? Ich dachte bis jetzt immer, <xsl:element> sei ausschließlich für die Transformation nach XML vorbehalten...?

Gruß

Neuromancer 3. Nov 2006 11:54

Re: [XML] for-each Schleife
 
Zitat:

Zitat von Luckie
Geht. Nur bei der Tabelle ignoriert er das collapse:

Könnte browserspezifisch sein. Auf welchen Browsern getestet? Bitte denk dran, dass der IE von CSS 2.0-Konformität nicht besonders viel hält (bis Version 6, bei der 7 soll's ja besser sein).

Gruß

Luckie 3. Nov 2006 11:56

Re: [XML] for-each Schleife
 
Sowohl auf IE als auch auf Firefox getestet. Um die Tabelle soll ein Rahmen und um die Zellen, aber eben nicht doppelt, wenn eben meherere Zellen neben oder untereinander sind.

Neuromancer 3. Nov 2006 12:02

Re: [XML] for-each Schleife
 
lies mal, vielleicht hilft dir das weiter:

http://de.selfhtml.org/css/eigenscha...m#border_style

(unteres Drittel, da steht was wichtiges über collapse)

Gruß

marabu 3. Nov 2006 12:07

Re: [XML] for-each Schleife
 
Hallo Armin,

Zitat:

Zitat von Neuromancer
hat denn <xsl:element> bei <xsl:output method="HTML" /> überhaupt eine Wirkung?

sollte schon so sein, allerdings hatte ich Michaels Satz "warum werden die Attribute für <td> nicht berücksichtigt" so interpetiert, dass die Attribute einfach unter den Tisch fallen. Deshalb mein Tipp mit dem xsl:element, statt dem HTML-Tag. Im nachhinein scheint es ja so zu sein, dass die Attribute zwar generiert, aber nicht umgesetzt werden. Deutsche Sprache schwere Sprache.

Grüße

Luckie 3. Nov 2006 12:45

Re: [XML] for-each Schleife
 
So. Das geht. Fehlt nur noch das mit dem

XML-Code:
      &lt;xsl:apply-templates select=&quot;Kontakt&quot;&gt;
        &lt;xsl:sort select=&quot;concat(Name, Vorname)&quot;/&gt;
      &lt;/xsl:apply-templates&gt;
Wie kann ich das gleiche hier erreichen? Kontakt sieht so aus:
XML-Code:
&lt;xsl:template match=&quot;Kontakt&quot;&gt;
  &lt;dl&gt;
    &lt;dt&gt;&lt;p&gt;
      &lt;a name=&quot;{Vorname}_{Name}:{position()}&quot; id=&quot;{Vorname}_{Name}:{position()}&quot;&gt;
        &lt;b&gt;&lt;xsl:value-of select=&quot;Name&quot;/&gt;*&lt;xsl:value-of select=&quot;Vorname&quot;/&gt;**&lt;xsl:value-of select=&quot;Firma&quot;/&gt;&lt;/b&gt;
      &lt;/a&gt;
    &lt;/p&gt;&lt;/dt&gt;
    &lt;dd&gt;&lt;p&gt;&lt;xsl:value-of select=&quot;Strasse&quot;/&gt;&lt;br/&gt;
      &lt;xsl:value-of select=&quot;PLZ&quot;/&gt; &lt;xsl:value-of select=&quot;Ort&quot;/&gt;&lt;br/&gt;
      &lt;xsl:if test=&quot;Land!=''&quot;&gt;&lt;xsl:value-of select=&quot;Land&quot;/&gt;&lt;br/&gt;&lt;/xsl:if&gt;
      &lt;xsl:if test=&quot;GebDat!=''&quot;&gt;Geburtsdatum: &lt;xsl:value-of select=&quot;GebDat&quot;/&gt;&lt;br/&gt;&lt;/xsl:if&gt;
      &lt;xsl:if test=&quot;Telefon1!=''&quot;&gt;Tel. &lt;xsl:value-of select=&quot;Telefon1&quot;/&gt;&lt;br/&gt;&lt;/xsl:if&gt;
      &lt;xsl:if test=&quot;Telefon2!=''&quot;&gt;Tel. &lt;xsl:value-of select=&quot;Telefon2&quot;/&gt;&lt;br/&gt;&lt;/xsl:if&gt;
      &lt;xsl:if test=&quot;Fax!=''&quot;&gt;Fax: &lt;xsl:value-of select=&quot;Fax&quot;/&gt;&lt;br/&gt;&lt;/xsl:if&gt;
      &lt;xsl:if test=&quot;EMail1!=''&quot;&gt;
        &lt;a href=&quot;mailto:{EMail1}&quot;&gt;&lt;xsl:value-of select=&quot;EMail1&quot;/&gt;&lt;/a&gt;&lt;br/&gt;
      &lt;/xsl:if&gt;
      &lt;xsl:if test=&quot;EMail2!=''&quot;&gt;
        &lt;a href=&quot;mailto:{EMail2}&quot;&gt;&lt;xsl:value-of select=&quot;EMail2&quot;/&gt;&lt;/a&gt;&lt;br/&gt;
      &lt;/xsl:if&gt;
      &lt;xsl:if test=&quot;URL!=''&quot;&gt;
        &lt;a href=&quot;{URL}&quot; target=&quot;_blank&quot;&gt;&lt;xsl:value-of select=&quot;URL&quot;/&gt;&lt;/a&gt;&lt;br/&gt;
      &lt;/xsl:if&gt;
     &lt;!-- Firma, Position, Bemerkung und InBericht spare ich mir an der Stelle --&gt;
    &lt;/p&gt;&lt;/dd&gt;
  &lt;/dl&gt;

  &lt;!-- wenn noch weitere Kontakte folgen, dann einen Abstand einbauen --&gt;
  &lt;xsl:if test=&quot;position()!=last()&quot;&gt;
    &lt;p&gt;&lt;br/&gt;&lt;/p&gt;
  &lt;/xsl:if&gt;
&lt;/xsl:template&gt;

DP-Maintenance 3. Nov 2006 18:31

DP-Maintenance
 
Dieses Thema wurde von "MrSpock" von "Programmieren allgemein" nach "XML" verschoben.
XML Beitrag.

Luckie 3. Nov 2006 19:57

Re: [XML] for-each Schleife
 
Arg, ich sehe gerade der neue IE7 macht im Code aus den < und > die Entitäten &lt; und ;&gt;. Der neue Firefox im Büro hat es richtig angezeigt. :wall:

Nein, auch der Firefox macht das. Aber beide nur im letzten Posting #14. :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz