Kerstin: XML aus XSL heraus aufrufen

Beitrag lesen

Hallo,

kannst du noch ein Beispiel-XML posten?

sicher:
1. XML mit den Daten: cdcatalog.xml
<catalog>
 <cd>
  <title>Empire Burlesque</title>
  <artist>Bob Dylan</artist>
  <country>USA</country>
  <company>Columbia</company>
  <price>10.90</price>
  <year>1985</year>
 </cd>
 <cd>
  <title>Hide your heart</title>
  <artist>Bonnie Tyler</artist>
  <country>UK</country>
  <company>CBS Records</company>
  <price>9.90</price>
  <year>1988</year>
 </cd>
</catalog>

2. XML mit der obersten Struktur: cdcatalog_book.xml
<html>
 <body>
 <h2>My CD Collection</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th align="left">Title</th>
        <th align="left">Artist</th>
      </tr>
      <cd_liste/>
    </table>
 </body>
</html>
worin <cdliste/> ersetzt werden soll

3. XML mit Struktur der Listenstruktur: cdcatalog_liste.xml
<tr>
    <td><title/></td>
    <td><artist/></td>
</tr>

Mit einem:
<xsl:for-each select="document('cdcatalog_liste.xml')/*">[3]
   xsl:apply-imports/
</xsl:for-each>
sollte es gehen.

Ging auch ohne. Mit ist kein Unterschied zu merken.

Allerdings ich sehe keinen Vorteil in diese Auslagerung, im Gegenteil, so wie sie jetzt ist, finde ich sie unnötig, weil sie die Sachen komplizierter macht, statt sie zu vereinfachen. (natürlich kenne ich nicht dein gesamt XSL)

Der Vorteil läge für mich darin, 1. die Anzeige-Struktur von den Daten getrennt zu halten. Die Anzeige-Struktur könnte nach belieben angepasst werden. Nur die Platzhalter für die Daten sollten erhalten bleiben, um die Daten einzufügen. 2. wäre damit auch die Wiederverwendbarkeit der Anzeige-Struktur möglich. Wenn an verschiedenen Stellen ein und die selbe Anzeigestruktur benötigt würde, bräuchte ich diese so nur einmal hinterlegen (cdcatalog_liste.xml) und rufe sie im HauptXSL nur jedesmal auf, kopiere die Elemente, die übernommen werden und ersetze die die durch Daten ersetzt werden sollen.

Das HauptXSL cdcatalog.xsl sieht immer noch so aus wie ich es vorher gepostet hatte:
<xsl:import href="cdcatalog_liste.xsl"/>

<xsl:template match="/">
  <xsl:apply-templates />
 </xsl:template>

<xsl:template match="*[name() != 'cd_liste']">
  xsl:copy
   <xsl:for-each select="@*">
   <xsl:copy />
  </xsl:for-each>
    <xsl:apply-templates />
  </xsl:copy>
 </xsl:template>

<xsl:template match="cd_liste">
  <xsl:for-each select="document('cdcatalog.xml')/catalog/cd">
   <xsl:variable name="title" select="title"></xsl:variable>
   <xsl:variable name="artist" select="artist"></xsl:variable>
    <xsl:for-each select="document('cdcatalog_liste.xml')/*">
     xsl:apply-imports/
   </xsl:for-each>
  </xsl:for-each>
 </xsl:template>

Mehr steht da echt noch nicht drin.

Gruß,
Kerstin