Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
HTML in XSLT, Verschachtelte Templates
polarbear
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

HTML in XSLT, Verschachtelte Templates

beantworten | zitieren | melden

Hallo Gemeinde,

der Inhalt des folgenden XML

<?xml version="1.0" encoding="utf-8" ?>
<docs>
	<row title="Titel a" teaser="Teaser AAAAA" imgsrc="a.gif" />
	<row title="Titel b" teaser="Teaser CCCCC" imgsrc="b.gif" />
	<row title="Titel c" teaser="Teaser BBBBB" imgsrc="c.gif" />
</docs>

soll via XSLT so ausgegeben werden:

<html><body>
	<table border="1">
	 	<tr><td colspan="2"><b>Titel a</b></td></tr>
	 	<tr>
			<td valign="top"><img src="a.gif"></td>
			<td>
				Teaser AAAAA<br><br>
				Titel b<br>
				Titel c
			</td>
		</tr>
	<table>
</body></html>

Dabei handelt es sich um drei Artikel, von denen der erste vollständig angeteasert wird und auf die restlichen Artikel nur mittels des Titels verwiesen wird.

Problem: Im XSLT gibt es eine Verschachtelung von Element mit position() = 1 (Vollständig angeteasert) und den folgenden Elementen für die position() > 1

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="html" />

	<xsl:template match="//docs">
		<div style="border:1px solid red">
			<xsl:apply-templates select="row"/>
		</div>
	</xsl:template>

	<xsl:template match="docs/row[position() = 1]">
		<table border="1">
		 	<tr><td colspan="2"><b><xsl:value-of select="@title"/></b></td></tr>
		 	<tr>
				<td valign="top"><img src="{@imgsrc}"/></td>
				<td>
					<xsl:value-of select="@teaser"/><br/><br/>
					<xsl:apply-templates select="row"/> <!-- ??????  -->
				</td>
			</tr>
		</table>
	</xsl:template>

	<xsl:template match="docs/row[position() > 1]">
		<xsl:value-of select="@title"/><br/>
	</xsl:template>

</xsl:stylesheet>

Wie kann das unterste template in das andere unter den genannten Bedingungen eingefügt werden? Gerne auch ganz andere Ansätze zur Realisierung der obigen Darstellung!

Dank und Gruss
Polarbear
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 476

Ein anderer Vorschlag

beantworten | zitieren | melden

Hallo polarbear,

ich hätte folgenden Vorschlag:


<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="html" />
   <xsl:template match="//docs">
      <div style="border:1px solid red">
         <xsl:apply-templates select="row" />
      </div>
   </xsl:template>
	
   <xsl:template match="row">
      <table border="1">
         <xsl:choose>
            <xsl:when test="position()=1">
               <tr><td colspan="2"><b><xsl:value-of select="@title" /></b></td></tr>
               <tr>
                  <td valign="top"><img src="{@imgsrc}" /></td>
                  <td><xsl:value-of select="@teaser" /><br /></td>
		</tr>
             </xsl:when>
             <xsl:otherwise>
                <tr><td colspan="2"><xsl:value-of select="@title" /></td></tr>
             </xsl:otherwise>
          </xsl:choose>
       </table>
    </xsl:template>
</xsl:stylesheet>

Kommt das einer Lösung für dein Problem nahe?

-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de
private Nachricht | Beiträge des Benutzers