Announcement

Collapse
No announcement yet.

XSLT's verschachteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XSLT's verschachteln

    Habe folgendes Problem, wäre sehr dankbar, wenn jemand weiter helfen könnte:
    Ich habe ein XSL-Stylesheet und abhängig von einem Abschnitt in der XML-Datei
    will ich ein anderes Stylesheet NUR für dieses Abschnitt laden, so, dass, dieses
    Stylesheet in den ersten Stylesheet quasi angebettet wird.
    habe verschiedene Möglichkeiten mit<xsl:import href=""> und <xsl:include
    href=""> angeguckt, bin aber nicht viel weiter gekommen.
    Hier ist ein Beispiel, der mein Problem spezifiziert, falls es nicht so klar ist, was
    gemeint wird:

    wie kann ich all das, was im Abschnitt <XML> mit einer anderen XSLT-Datei
    darstellen, wobei das Gesamtaussehen nicht verändert wird?
    **************************************
    XML-Datei:
    <PRE>
    &lt;?xml version="1.0" encoding="UTF-8"?&gt;
    &lt;FRAGMENTS&gt;
    &lt;FRAGMENT&gt;
    &lt;TEXT&gt;Hier ist der einfache Text&lt;/TEXT&gt;
    &lt;/FRAGMENT&gt;
    &lt;FRAGMENT&gt;
    &lt;XML&gt;
    &lt;E-Mail-Daten&gt;
    &lt;E-Mail-Eintrag&gt;
    &lt;Person&gt;Webmaster&lt;/Person&gt;
    &lt;E-Mail&gt;[email protected]&lt;/E-Mail&gt;
    &lt;/E-Mail-Eintrag&gt;
    &lt;E-Mail-Eintrag&gt;
    &lt;Person&gt;Informationen&lt;/Person&gt;
    &lt;E-Mail&gt;[email protected]&lt;/E-Mail&gt;
    &lt;/E-Mail-Eintrag&gt;
    &lt;/E-Mail-Daten&gt;
    &lt;/XML&gt;
    &lt;/FRAGMENT&gt;
    &lt;/FRAGMENTS&gt;
    </PRE>
    ************************************************** *****
    XSL dazu:

    *********************************
    <PRE>
    &lt;?xml version="1.0" encoding="UTF-8"?&gt;
    &lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;
    &lt;xsl:template match="/"&gt;
    &lt;html&gt;
    &lt;head /&gt;
    &lt;body&gt;
    &lt;xsl:for-each select="FRAGMENTS"&gt;
    &lt;xsl:for-each select="FRAGMENT"&gt;
    &lt;xsl:for-each select="TEXT"&gt;
    &lt;xsl:apply-templates /&gt;
    &lt;/xsl:for-each&gt;
    &lt;/xsl:for-each&gt;
    &lt;/xsl:for-each&gt;
    &lt;br /&gt;
    &lt;xsl:for-each select="FRAGMENTS"&gt;
    &lt;xsl:for-each select="FRAGMENT"&gt;
    &lt;xsl:for-each select="XML"&gt;
    &lt;xsl:apply-templates /&gt;
    &lt;/xsl:for-each&gt;
    &lt;/xsl:for-each&gt;
    &lt;/xsl:for-each&gt;
    &lt;/body&gt;
    &lt;/html&gt;
    &lt;/xsl:template&gt;
    &lt;/xsl:stylesheet&gt;
    </PRE>
    ***********************************************
    ein anderes XSL:, der eigentlich für den abschnitt &lt;XML&gt; gedacht ist:
    ********
    <PRE>
    &lt;?xml version="1.0" encoding="UTF-8"?&gt;
    &lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;
    &lt;xsl:template match="/"&gt;
    &lt;html&gt;
    &lt;head /&gt;
    &lt;body&gt;
    &lt;xsl:for-each select="E-Mail-Daten"&gt;
    &lt;table border="1"&gt;
    &lt;thead&gt;
    &lt;tr&gt;
    &lt;td&gt;Person&lt;/td&gt;
    &lt;td&gt;E-Mail&lt;/td&gt;
    &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
    &lt;xsl:for-each select="E-Mail-Eintrag"&gt;
    &lt;tr&gt;
    &lt;td&gt;
    &lt;xsl:for-each select="Person"&gt;
    &lt;xsl:apply-templates /&gt;
    &lt;/xsl:for-each&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;xsl:for-each select="E-Mail"&gt;
    &lt;xsl:apply-templates /&gt;
    &lt;/xsl:for-each&gt;
    &lt;/td&gt;
    &lt;/tr&gt;
    &lt;/xsl:for-each&gt;
    &lt;/tbody&gt;
    &lt;/table&gt;
    &lt;/xsl:for-each&gt;
    &lt;/body&gt;
    &lt;/html&gt;
    &lt;/xsl:template&gt;
    &lt;/xsl:stylesheet&gt;
    </PRE>
    Vielen Dank im Voraus

  • #2
    Eigentlich soll dieser Abschnitt auch in einer separaten XML-Datei( also ohne grossen umfassenden Datei) mit diesem zweiten Stylesheet dargestellt werden...

    Comment


    • #3
      Warum willst Du mehrere Dateien? Versuch es doch mal mit mehreren Templates

      <PRE>
      <xsl:template select="/">
      <html>
      <head />
      <body>
      <xsl:apply-templates select="FRAGMENTS">
      </body>
      </html>

      </xsl:template>

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

      <xsl:template match="FRAGMENT">
      <xsl:apply-templates select="TEXT|XML">
      </xsl:template>

      <xsl:template match="TEXT">
      ....
      </xsl:template>

      <xsl:template match="XML">
      ....
      </xsl:template>
      </PRE&gt

      Comment


      • #4
        Hallo Nikolai
        was du eventuell braucht ist eine Applikationsebene
        zb löse dies durch PHP
        einerseite verwende ich PHP zum Parser (XML XSL)
        und dabei werden dynamisch (actionen)
        verschieden XSL und auch XML Files zum Parsen angewiesen.

        falls du keine Applikation dahinter diese Sache lösen lässt,
        kannst du auch mittels Templates (im selben XSL oder per
        xsl:include in extern XSL egal) diese sache auf grund
        irgendwelcher parameter auswählbar machen
        template match kanst du gleich template mit verschiedenen
        namen belegen und somit auf diese zugreifen.

        usw..

        [email protected]

        Comment

        Working...
        X