fjh: 2x XML + 1x XSL => HTML! Wie?

Beitrag lesen

Hallo pewe,

Könnte man nicht ein XSL schreiben, das die Transformation vornimmt?

Ja, kann "man"/du.

Wie Andreas schon sagte, dazu dient die document()-Funktion in XSLT. Sie liefert Dir den Wurzelknoten des Dokuments, dessen URI du als Arguments übergibts. Von diesem Knoten aus kannst du dann mit XPath weiternavigieren. Dein Beispiel ließe sich also recht einfach so realisieren:

News-Datei (news.xml)

<?xml-stylesheet href="news.xsl" type="text/xsl"?>

<news>
  <eintrag datum="17.7.2002">Grandiose Neuigkeiten!</eintrag>
  <eintrag datum="1.7.2002">Vorige News!</eintrag>
</news>

Dies ist die Datei, welche das Stylesheet refenziert.

Datei mit Email-Adressen (email.xml)

<email>
  <link id="webmaster" mailto="webmaster@email.net">Webmaster</link>
  <link id="kontakt" mailto="kontakt@email.net">pewe</link>
</email>

XSLT-Stylesheet (news.xsl)

<?xml version="1.0" encoding="iso-8859-1"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="/">
  <html>
    <head>
      <title>Test für document()-Funktion</title>
    </head>
    <body>
      xsl:apply-templates/
    </body>
  </html>
</xsl:template>

<xsl:template match="eintrag">
  <p>News: <xsl:value-of select="@datum"/> - <xsl:value-of select="."/></p>
  <p>Schreibt eine email an <a href="{document('email.xml')/email/link/@mailto}"><xsl:value-of select="document('email.xml')/email/link/@id"/></a></p>
</xsl:template>

</xsl:stylesheet>

Das Stylesheet referenziert die email.xml und selektiert direkt aus der Datei Werte.

Welche email allerdings zu welcher News gehört ist anhand Deiner Dateien nicht ersichtlich. Um eine solche Zuordnung zu treffen, müsstest du mit ID und IDREF arbeiten, aber das geht nur innerhalb einer Datei. Aber vielleicht ist das ja gar nicht mehr relevant für dich. Jedenfalls hat es nix mehr mit dem XSLT-Problem zu tun.

Gruß
Franz