Schleife über alle Elemente

Looky

Erfahrenes Mitglied
Hallo Leute,

wie kann ich in xsl eine schleife machen, die über jedes element iteriert?

Ziel ist, ich möchte einbe Schleife machen und dann eine art switch-Case konstrukt aufbauen, sodass ich abfragen kann: Wenn Text, dann gib aus, wenn bild dann gib aus usw..

Danke und frohe weihnachten
Christian
 
Hi.

XML:
<xsl:for-each select="//node()">
  ...
</xsl:for-each>
Warum willst du denn keine Templates dafür benutzen?

Gruß
 
Zuletzt bearbeitet von einem Moderator:
ich raff das ganze prinzip noch net. ok, ich habe ein "template" für eine tabelle. aber ich kann ich das template nun so aufsplitten, dass ich in die erste zelle ein bild und in die 2. ein text bekommen oder in manchen fällken auch andersrum...

sorry, aber ich blicks echt nicht..
christian
 
ich raff das ganze prinzip noch net. ok, ich habe ein "template" für eine tabelle. aber ich kann ich das template nun so aufsplitten, dass ich in die erste zelle ein bild und in die 2. ein text bekommen oder in manchen fällken auch andersrum...

sorry, aber ich blicks echt nicht..
christian
Ist deine Umschalt-Taste kaputt gegangen? ;-] Netiquette

Es hängt doch alles von deinen Eingabedaten ab. Wie ist die Eingabedatei aufgebaut? Wie soll die Ausgabe aussehen? Welches Format? HTML? Darüber mußt du dir doch klar sein bevor du überhaupt mit XSL anfängst.

Gruß
 
Naja,

ok, ich habe ein Script, das da ungefähr so aussehen (kann).

Code:
<?xml version="1.0" encoding="UTF-8"?> 
<VZV-PARTNER xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"  
xsi:noNamespaceSchemaLocation="http://www.vodafonelivepartners.co
m/schema/VZV-PARTNER.xsd"> 
  <PARTNER-PI> 
   <TRANSFORMER name="VZV-DEFAULT"/> 
  </PARTNER-PI> 
  <PARTNER-BODY> 
   <VZV-DEFAULT> 
    <CONTAINER type="data"> 
     <TITLE>Our Wallpapers</TITLE> 
     <TEXT> 
      <p>Click on any of the thumbnails for a 
preview.</p> 
     </TEXT> 
    </CONTAINER> 
    <CONTAINER type="gallery"> 
     <!-- a GALLERY of images...--> 
     <GALLERY> 
      <IMAGE href="resevil.jpg" preview="resevil-
preview.jpg" purchase-label="U.S. No. 1 Resident Evil" 
serviceid="abc123"/> 
      <IMAGE href="terminal.jpg" preview="terminal-
preview.jpg" purchase-label="Tom Hanks in The Terminal" 
serviceid="abc123"/> 
      <IMAGE href="cellular.jpg" preview="cellular-
preview.jpg" purchase-label="The U.S. Hit Cellular" 
serviceid="abc123"/> 
      <IMAGE href="hero.jpg" preview="hero-preview.jpg" 
purchase-label="Jet Li Epic: Hero" serviceid="fgh789"/> 
      <IMAGE href="hellboy.jpg" preview="hellboy-
preview.jpg" purchase-label="Ron Perlman as Hellboy" 
serviceid="fgh789"/> 
      <IMAGE href="jaws.jpg" preview="jaws-preview.jpg" 
purchase-label="The classic Jaws wallpaper" serviceid="fgh789"/> 
      <IMAGE href="starwars.jpg" preview="starwars-
preview.jpg" purchase-label="R2D2 and C3PO from Star Wars" 
serviceid="fgh789"/> 
     </GALLERY> 
    </CONTAINER> 
   </VZV-DEFAULT> 
  </PARTNER-BODY> 
</VZV-PARTNER>

Nun muss ich das ganze in ganz normalen HTML Code umformatieren. Warum ich das mit einer Schleife machen will? Naja, das o.a. Beispiel ist ja noch machbar, aber was ist wenn ich ein Mischmasch aus Tabellenzellen, darin dann diese Gallery und dann noch von mir aus ein Textfeld habe.

Das wären ja 100rte if abfragen, dass muss doch auch intelligenter gehen.

Mit den Templates habe ich so verstanden, dass man sein HTML Quelltext in die XSLT schreibt und dann mit mit einem Befehl einfach nur die Werte in die Spalten ausgibt.

So z.B.

Code:
<table>
<tr>
<td>
<xsl BLABLA WERTAUSGABE>
</td>
</tr>
</table>

so und was mache ich nun wenn ich aber 5 Zellen habe? Muss ich dann den HTML Code in der XSL neu schreiben?

Christian

PS: Ja ich bin im Thema XSL ein Newbie ;)
 
Naja,

ok, ich habe ein Script, das da ungefähr so aussehen (kann).

Code:
<?xml version="1.0" encoding="UTF-8"?> 
<VZV-PARTNER xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"  
xsi:noNamespaceSchemaLocation="http://www.vodafonelivepartners.co
m/schema/VZV-PARTNER.xsd"> 
  <PARTNER-PI> 
   <TRANSFORMER name="VZV-DEFAULT"/> 
  </PARTNER-PI> 
  <PARTNER-BODY> 
   <VZV-DEFAULT> 
    <CONTAINER type="data"> 
     <TITLE>Our Wallpapers</TITLE> 
     <TEXT> 
      <p>Click on any of the thumbnails for a 
preview.</p> 
     </TEXT> 
    </CONTAINER> 
    <CONTAINER type="gallery"> 
     <!-- a GALLERY of images...--> 
     <GALLERY> 
      <IMAGE href="resevil.jpg" preview="resevil-
preview.jpg" purchase-label="U.S. No. 1 Resident Evil" 
serviceid="abc123"/> 
      <IMAGE href="terminal.jpg" preview="terminal-
preview.jpg" purchase-label="Tom Hanks in The Terminal" 
serviceid="abc123"/> 
      <IMAGE href="cellular.jpg" preview="cellular-
preview.jpg" purchase-label="The U.S. Hit Cellular" 
serviceid="abc123"/> 
      <IMAGE href="hero.jpg" preview="hero-preview.jpg" 
purchase-label="Jet Li Epic: Hero" serviceid="fgh789"/> 
      <IMAGE href="hellboy.jpg" preview="hellboy-
preview.jpg" purchase-label="Ron Perlman as Hellboy" 
serviceid="fgh789"/> 
      <IMAGE href="jaws.jpg" preview="jaws-preview.jpg" 
purchase-label="The classic Jaws wallpaper" serviceid="fgh789"/> 
      <IMAGE href="starwars.jpg" preview="starwars-
preview.jpg" purchase-label="R2D2 and C3PO from Star Wars" 
serviceid="fgh789"/> 
     </GALLERY> 
    </CONTAINER> 
   </VZV-DEFAULT> 
  </PARTNER-BODY> 
</VZV-PARTNER>

Nun muss ich das ganze in ganz normalen HTML Code umformatieren. Warum ich das mit einer Schleife machen will? Naja, das o.a. Beispiel ist ja noch machbar, aber was ist wenn ich ein Mischmasch aus Tabellenzellen, darin dann diese Gallery und dann noch von mir aus ein Textfeld habe.

Das wären ja 100rte if abfragen, dass muss doch auch intelligenter gehen.

Mit den Templates habe ich so verstanden, dass man sein HTML Quelltext in die XSLT schreibt und dann mit mit einem Befehl einfach nur die Werte in die Spalten ausgibt.

So z.B.

Code:
<table>
<tr>
<td>
<xsl BLABLA WERTAUSGABE>
</td>
</tr>
</table>

so und was mache ich nun wenn ich aber 5 Zellen habe? Muss ich dann den HTML Code in der XSL neu schreiben?
Nein.

Du würdest dir z.B. ein Template zur Transformation eines IMAGE Elements in ein HTML img Element schreiben:
XML:
<xsl:template match="IMAGE">
  <img>
    <xsl:attribute name="href"><xsl:value-of select="@href" /></xsl:attribute>
  </img>
</xsl:template>
Dann brauchst du natürlich noch andere Templates für die Elemente die du zu HTML Transformieren willst.

Z.B. für die Gallerie:
XML:
<xsl:template match="GALLERY">
  <div class="gallery">
    <xsl:apply-templates />
  </div>
</xsl:template>
Der XSL Prozessor würde dann für jedes Element innerhalb eines GALLERY Elementes das passende Template aufrufen.

Mit einem entsprechenden XPath Ausdruck kann man die Verarbeitung der Elemente beinflussen.

Gruß
 
Zuletzt bearbeitet von einem Moderator:
Zurück