XSL - schleife in einer schleife

hier nocheinmal genauer...

meine xml datei:
test.xml
PHP:
<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:
<?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
 

Anhänge

  • 1.JPG
    1.JPG
    46,6 KB · Aufrufe: 32
  • 2.JPG
    2.JPG
    25,2 KB · Aufrufe: 23
Aha, das XML hat also keine weitere Struktur an der man erkennen könnte welche Titel und Beschreibungungen zusammengehören; es ist alles im Grunde hintereinandergeklatscht.

Unter der Annahme, das jeder Titel auch genau eine Beschreibung besitzt und das diese in der Reihenfolge abwechselnd hintereinanderstehen, kannst du es so machen:
XML:
<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>
Gruß
 
Zuletzt bearbeitet von einem Moderator:
Zurück