Announcement

Collapse
No announcement yet.

schleife in einer schleife

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • schleife in einer schleife

    ist es möglich eine schleife in einer schleife zu bauen?
    z.b. so


    PHP Code:
    <xsl:for-each select="document/elements/element[@type='titel']">  
    <
    table border="0">
      <
    tr>
        <
    td
        </
    td>
        <
    td rowspan="2">
        <
    xsl:for-each select="document/elements/element[@type='titel']">  
          <
    div id="title_zoom"><xsl:value-of disable-output-escaping="yes" select="current()" /></div>
        </
    xsl:for-each>      
        </
    td>
       </
    tr>
       <
    tr
        <
    td>
        <
    xsl:for-each select="document/elements/element[@type='text']">  
          <
    div id="teaser_zoom"><xsl:value-of disable-output-escaping="yes" select="current()" /></div>
        </
    xsl:for-each>     
        </
    td>
      </
    tr>
    </
    table>
    </
    xsl:for-each

  • #2
    Vorsicht mit dem Begriff Schleife, xsl:for-each ist eher eine Mehrfachverarbeitungsanweisung. Man kann xsl:for-each durchaus verschachteln, allerdings ist dann die Relation der Referenzierung zu beachten. Im genannten Code wird unterhalb von element wieder auf document referenziert. Vermutlich sind für das gesuchte Ergebnis überhaupt keine xsl:for-each-Konstrukte nötig, wenn sinnvoll mit xsl:template und xsl:apply-templates gearbeitet wird.

    Comment


    • #3
      wie müsste die referenzierung dann aussehen?
      so?

      PHP Code:
      <xsl:for-each select="document/elements/element[@type='titel']">   
      <
      table border="0"
        <
      tr
          <
      td
          </
      td
          <
      td rowspan="2"
          <
      xsl:for-each select="type='titel'">   
            <
      div id="title_zoom"><xsl:value-of disable-output-escaping="yes" select="current()" /></div
          </
      xsl:for-each>       
          </
      td
         </
      tr
         <
      tr
          <
      td
          <
      xsl:for-each select="type='text'">   
            <
      div id="teaser_zoom"><xsl:value-of disable-output-escaping="yes" select="current()" /></div
          </
      xsl:for-each>      
          </
      td
        </
      tr
      </
      table
      </
      xsl:for-each

      Comment


      • #4
        Ohne die Ausgangsstruktur im Detail zu kennen, vermutlich so:

        Code:
        <xsl:for-each select="document/elements">
        
          <xsl:for-each select="element[@type='titel']">
            <!-- ... -->
          </xsl:for-each> 
        
          <xsl:for-each select="element[@type='text']">
            <!-- ... -->
          </xsl:for-each> 
         
        </xsl:for-each>

        Comment


        • #5
          ich möchte pro titel eine tabelle mit titel und text erzeugen. wenn ich es so mache:

          PHP Code:
          <xsl:for-each select="document/elements/element[@type='titel']">    
          <
          table border="0"
            <
          tr
              <
          td
              </
          td
              <
          td rowspan="2"
              <
          xsl:for-each select="element[@type='titel']">    
                <
          div id="title_zoom"><xsl:value-of disable-output-escaping="yes" select="current()" /></div
              </
          xsl:for-each>        
              </
          td
             </
          tr
             <
          tr
              <
          td
              <
          xsl:for-each select="element[@type='text']">    
                <
          div id="teaser_zoom"><xsl:value-of disable-output-escaping="yes" select="current()" /></div
              </
          xsl:for-each>       
              </
          td
            </
          tr
          </
          table
          </
          xsl:for-each
          bekomme ich ein fehler beim generieren.

          Comment


          • #6
            Deshalb schrieb ich ja <xsl:for-each select="document/elements">.

            Comment


            • #7
              wenn ich es so mache "<xsl:for-each select="document/elements">"
              funktionieren zwar die schleifen innerhalb meiner tabelle aber es wird insgesammt nur eine tabelle erzeugt.

              kann man irgendwie eine stufe im knoten wieder zurück?

              Comment


              • #8
                Dazu müsste ich mal die Ausgangsstruktur sehen.

                Comment


                • #9
                  ich habs...

                  PHP Code:
                  <xsl:for-each select="document/elements/element[@type='titel']">     
                  <
                  table border="0"
                    <
                  tr
                      <
                  td
                      </
                  td
                      <
                  td rowspan="2"
                      <
                  xsl:for-each select="../element[@type='titel']">     
                        <
                  div id="title_zoom"><xsl:value-of disable-output-escaping="yes" select="current()" /></div
                      </
                  xsl:for-each>         
                      </
                  td
                     </
                  tr
                     <
                  tr
                      <
                  td
                      <
                  xsl:for-each select="../element[@type='text']">     
                        <
                  div id="teaser_zoom"><xsl:value-of disable-output-escaping="yes" select="current()" /></div
                      </
                  xsl:for-each>        
                      </
                  td
                    </
                  tr
                  </
                  table
                  </
                  xsl:for-each

                  einfach "../" vornedran. aber jetzt habe ich ein neues problem =) in jeder tabelle steht nun das gleiche drin. ich hab beispielsweise 2 titel und 2 texte.
                  so ist es momentan:
                  <tabelle>
                  titel A
                  titel B
                  text A
                  text B
                  </tabelle>
                  <tabelle>
                  titel A
                  titel B
                  text A
                  text B
                  </tabelle>

                  es soll aber so aussehen:

                  <tabelle>
                  titel A
                  text A
                  </tabelle>
                  <tabelle>
                  titel B
                  text B
                  </tabelle>

                  evtl. statt dem select="current()" etwas anderes nehmen? kenn mich leider nicht gut genug aus...

                  Comment


                  • #10
                    Dann zeige doch mal die Teststruktur mit A und B.

                    Comment


                    • #11
                      meinst du das xml file?
                      da hab ich nur 2 elemente drin so wie das hier

                      <element id="text" description="xml.xlbl.text" type="htmledit" default="true" singleinstance="false" />

                      Comment


                      • #12
                        hier nocheinmal genauer...

                        meine xml datei:
                        test.xml
                        PHP Code:
                        <document document="test">
                          <
                        properties>
                            <
                        property type="name" prop_ns="http://sapportals.com/xmlns/cm" prop_name="displayname"/>
                            <
                        property type="createdBy">USER.CORP_LDAP.matthias.bessler</property>
                            <
                        property type="description">
                            </
                        property>
                            <
                        property type="language" prop_ns="wpc_wcm" prop_name="wpc_wcm_language"/>
                            <
                        property type="region" prop_ns="wpc_wcm" prop_name="wpc_wcm_region"/>
                            <
                        property type="includeInRSS" prop_ns="wpc_wcm" prop_name="wpc_wcm_rss"/>
                            <
                        property type="displayNewIcon" prop_ns="wpc_wcm" prop_name="wpc_wcm_new"/>
                          </
                        properties>
                          <
                        elements>
                            <
                        element type="internallink" title="link1" rid="http://www.google.de" targetnew="false" linkid="346aca5b411575f59144c31859fe4bc6"/>
                            <
                        element type="linkdescription">text1</element>
                            <
                        element height="50" width="50" type="image">http://www.oobe-forum.de/klartraum/images/avatars/avatar-79.gif</element>
                            
                        <element type="internallink" title="link2" rid="http://www.google.de" targetnew="false" linkid="73459a7179d47398cf7ff31859fed293"/>
                            <
                        element type="linkdescription">text2</element>
                            <
                        element height="50" width="50" type="image">http://www.oobe-forum.de/klartraum/images/avatars/avatar-79.gif</element>
                          
                        </elements>
                          <
                        relatedlinks/>
                          <
                        relatedfiles/>
                        </
                        document
                        meine xsl datei:
                        test.xsl
                        HTML Code:
                        <?xml version="1.0"?>
                        
                        <!DOCTYPE stylesheet [
                        <!ENTITY apos  "'" ><!-- replace &apos; with html escape character for ' -->
                        ]>
                        
                        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                        			      xmlns:wpc="com.sap.nw.wpc.km.service.linkmanager.XsltHelper"> 
                            <xsl:output method="html"/>
                            <xsl:template match="/">
                        
                        <div class="featurebox clearfixleft">	
                        <table width="100%">
                        	<tr>
                        		<td valign="middle">
                        		<p style="font-size:1em; font-family:System; font-weight:bold; border-width:1px; border-color:#000000; border-style:solid; padding:8px;">Download</p>
                        </td>
                            </tr>
                        </table>
                        
                        <xsl:for-each select="document/elements/element[@type='internallink']">
                        <table border="0">
                        		<tr>
                        			<td>
                        
                        <xsl:if test="@type='internallink'">
                        <xsl:if test="string-length(@title)!=0">
                        <a>
                        <xsl:attribute name="href">
                          <xsl:value-of disable-output-escaping="yes" select="current()" /> 
                          </xsl:attribute>
                        <xsl:attribute name="onclick">
                          <xsl:value-of disable-output-escaping="yes" select="current()" /> 
                          </xsl:attribute>
                        <xsl:attribute name="target">
                          <xsl:value-of select="@targetnew" /> 
                          </xsl:attribute>
                          <xsl:value-of select="@title" disable-output-escaping="yes" /> 
                          </a>
                          </xsl:if>
                          </xsl:if>
                         
                        			</td>
                        			<td rowspan="2">
                        			
                        <xsl:for-each select="../element[@type='image']">    
                            
                        		   <xsl:if test="@type='image'">
                        			<img>
                        			<xsl:attribute name="src"><xsl:value-of disable-output-escaping="yes" select="current()"/></xsl:attribute>
                        			<xsl:if test="string-length(@height)!=0">
                        				<xsl:attribute name="height"><xsl:value-of disable-output-escaping="yes" select="@height"/></xsl:attribute>
                        			</xsl:if>
                        			<xsl:if test="string-length(@width)!=0">
                        				<xsl:attribute name="width"><xsl:value-of disable-output-escaping="yes" select="@width"/></xsl:attribute>
                        			</xsl:if>
                        			</img>
                        		   </xsl:if>
                        
                        </xsl:for-each>			
                        			
                        			
                        			</td>
                        		</tr>
                        		<tr>
                        			<td>
                        			
                        <xsl:for-each select="../element[@type='linkdescription']">
                        
                        <xsl:if test="@type='linkdescription'">
                        <xsl:if test="string-length(current())!=0">
                        <xsl:value-of select="current()" disable-output-escaping="yes" /> 
                        </xsl:if>
                        </xsl:if>
                        
                        </xsl:for-each>			
                        			
                        			</td>
                        		</tr>
                        </table>
                        <hr style="border:solid #000000 1px;height:1px;"></hr>
                        </xsl:for-each>			
                        
                        
                        </div>
                        </xsl:template>
                        </xsl:stylesheet>

                        Ergebnis sieht aus wie in Bild Nr.1
                        Es soll aber so aussehen wie auf Bild Nr.2
                        Attached Files

                        Comment


                        • #13
                          problem gelöst!

                          PHP Code:
                          <xsl:for-each select="document/elements/element[@type='internallink']">
                          <
                          xsl:variable name="pos" select="position()" /> 
                          <
                          table border="0">   
                          ...        
                          <
                          tr>            
                          <
                          td>            
                          <
                          xsl:value-of select="../element[@type = 'linkdescription'][$pos]" />
                          </
                          td>        
                          </
                          tr>
                          </
                          table

                          Comment

                          Working...
                          X