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

Hallo!

Ich möchte 2 XML Dateien mit einem XSL in eine HTML Seite transformieren.
Nur leider habe ich keine Ahnung wie ich das anstellen kann!?
Im Moment verwende ich Xalan auf der Komandozeile.

LG

PS: Die Transformation einer XML mit einem XSL in eine HTML Seite funktioniert bei mir.

  1. Hallo,

    Ich möchte 2 XML Dateien mit einem XSL in eine HTML Seite transformieren.
    Nur leider habe ich keine Ahnung wie ich das anstellen kann!?
    Im Moment verwende ich Xalan auf der Komandozeile.

    Mit PHP/Sablotron wuerde ich es so machen:

    • HTML-Kopf erstellen --> $str1
    • erstes XML-Dokument + XSL verarbeiten --> $str2
    • zweites XML-Dokument + XSL verarbeiten --> $str3
    • HTML-Ende erstellen --> $str4

    $str1 bis $str4 zusammen setzen und ausgeben.

    MfG, Thomas

    1. Danke für deinen Tipp! Aber im Moment will ich ohne Programmieren (PHP, CGI, Java, usw.) auskommen.

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

      Ich möchte ein Beispiel anführen:
      News sind in news.xml gespeichert:
         <news>
               <eintrag datum="17.7.2002">Grandiose Neuigkeiten!</eintrag>
               <eintrag datum="1.7.2002">Vorige News!</eintrag>
         </news>

      Alle Emailadressen sind in email.xml gespeichert:
         <email>
                <link id="webmaster" mailto="webmaster@email.net">Webmaster</link>
                <link id="kontakt" mailto="kontakt@email.net">pewe</link>
         </email>

      Die Daten aus obigen XML Dateien werden in der Startseite benötigt (startseite.xml), die folgendes (HTML) Aussehen hat:
           [...]
           News: 17.7.2002 - Grandiose Neuigkeiten.
           Schreibt eine email an <a href="kontakt@email.net>pewe</a>.
           [...]

      Für mich stellt sich die Frage, ob man die Dateien bzw. Daten verlinken kann:
         <startseite>
               <news which="last"/> <!-- last ist einfach eine Variable die man abfrägt. -->
               <text>Schreibt eine Email an <link id="kontakt"/></text>
         </startseite>
      Hier stellt sich die Frage wie man die Referenzen (wenn möglich ohne programmieren) im XSL auflöst.

      Oder, man sie umkopieren muß (vorzugsweise mit einem XSL!?):
         <startseite>
               <news>
                     <eintrag datum="17.7.2002">Grandiose Neuigkeiten!</eintrag>
               </news>
               <text>
                     Schreibt eine Email an
                     <link mailto="kontakt@email.net">pewe</link>
                     .
               </text>
         </startseite>
      Diese startseite.xml kann ich ohne Probleme in eine HTML transformieren.
      Wie sieht das XSL für dieses "umkopieren" aus?

      Ich hoffe mit dem Beispiel konnte ich einiges verdeutlichen.

      LG

      Hallo,

      Ich möchte 2 XML Dateien mit einem XSL in eine HTML Seite transformieren.
      Nur leider habe ich keine Ahnung wie ich das anstellen kann!?
      Im Moment verwende ich Xalan auf der Komandozeile.

      Mit PHP/Sablotron wuerde ich es so machen:

      • HTML-Kopf erstellen --> $str1
      • erstes XML-Dokument + XSL verarbeiten --> $str2
      • zweites XML-Dokument + XSL verarbeiten --> $str3
      • HTML-Ende erstellen --> $str4

      $str1 bis $str4 zusammen setzen und ausgeben.

      MfG, Thomas

      1. 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

  2. Hallo!

    Tach

    Ich möchte 2 XML Dateien mit einem XSL in eine HTML Seite transformieren.
    Nur leider habe ich keine Ahnung wie ich das anstellen kann!?
    Im Moment verwende ich Xalan auf der Komandozeile.

    Dann guck Dir http://www.w3.org/TR/xslt#document an.
    Andreas