Mirko Heinbuch: XPath - Document() - Stylesheet

Hallo zusammen,

ich finde leider nirgends eine Lösung.
Mein Problem:

Ich möchte in eine XML-Datei eine zweite Laden. Leider werden die Stylesheets (in XSL) nicht übernommen. Kann ich für die importierte XML-Datei separate Stylesheets definieren ? Wenn ja, wie ?

Gruß
Mirko

  1. Hallo,

    ich finde leider nirgends eine Lösung.
    Mein Problem:

    Ich möchte in eine XML-Datei eine zweite Laden. Leider werden die Stylesheets (in XSL) nicht übernommen. Kann ich für die importierte XML-Datei separate Stylesheets definieren ?

    Ist nicht nötig ...

    Wenn ja, wie ?

    Wenn du zeigst, was du versucht hat, kann man dir eine Lösung auch zeigen, sonst bist du mit document() richtig.
    ducument('andere.xml') liefert dir den Wurzelknoten (root noode) der anderen XML-Datei.
    <xsl:apply-templates select="ducument('andere.xml')" /> würde die Templates aufrufen, die du für das andere Dokument definiert hast.

    <xsl:apply-templates select="ducument('andere.xml')/dasWurzelElement/einAnderesElement" /> ruft das Template für "einAnderesElement" Element auf: <xsl:template match="dasWurzelElement/einAnderesElement">
    Natürlich kann man das auch anderes machen, aber da ich nicht weiss, was du versucht hast und wie dein XML und XSL aussieht (auszugsweise) kann ich dir nichts anderes sagen.

    Grüße
    Thomas

    --
    Surftip: kennen Sie schon Pipolino's Clowntheater?
    http://www.clowntheater-pipolino.net/
    1. Danke schonmal,
      aber ganz klappt es leider noch nicht.

      ich habe zwei XML dateien mit jeweils einer eigenen XSL-Datei:

      Erste XML Datei:
      <?xml version="1.0" encoding="UTF-8"?>
      <?xml-stylesheet type="text/xsl" href="one.xsl" ?>

      <main>

      <text>Hallo</text>
          <in source="two.xml"/>

      </main>
      --------------------------------------
      Erste XSL Datei:
       <xsl:template match="/">
           <html><body>
           xsl:apply-templates/
           </body></html>
           </xsl:template>

      <xsl:template match="text">

      <p style="color:#ff0000"><xsl:value-of select="."/></p>

      </xsl:template>

      <xsl:template match="in">

      <xsl:apply-templates select="document(./@source)/test"/>

      </xsl:template>

      </xsl:stylesheet>

      ----------------------------
      Zweite XML Datei:
      <?xml version="1.0" encoding="UTF-8"?>
      <?xml-stylesheet type="text/xsl" href="two.xsl" ?>
      <wow>

      <test>
          IT Works !
         </test>
        </wow>

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

      </xsl:template>

      <xsl:template match="test">
            <p style="color:#ff0000"><xsl:value-of select="."/></p>
            </xsl:template>

      </xsl:stylesheet>

      Jetzt müßte er ja beides rot anzeigen..

      Er zeigt aber nur "Hallo". It works kommt gar nicht vor...

      1. Ok, habe den Fehler

        in der ersten XSL verbessert:
                <xsl:apply-templates select="document(./@source)/wow/test"/>

        Jetzt zeigt er auch "It Works" an, aber nicht in rot, so wie es eigentlich definiert ist

        1. Ok, ;-)

          jetzt klappt es.

          Habe vergessen das andere Stylesheet zu importieren mit

          <xsl:import href="x.xsl"/>

          Ich danke dir ! ;-)

          1. Hallo,

            jetzt klappt es.

            Habe vergessen das andere Stylesheet zu importieren mit

            <xsl:import href="x.xsl"/>

            Ich danke dir ! ;-)

            Nichts zu danken.
            Wie gesagt du kannst aber auch den Import verzeicheten:
            ----------------------
            <?xml version="1.0" encoding="iso-8859-1"?>
            <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
             <xsl:template match="/">
                 <html><body>
               xsl:apply-templates/
              </body></html>
             </xsl:template>
             <xsl:template match="text">
              <p style="color:#ff0000"><xsl:value-of select="."/></p>
                </xsl:template>

            <xsl:template match="in">
              <xsl:apply-templates select="document(./@source)"/>
                </xsl:template>

            <xsl:template match="wow">
              xsl:apply-templates/
             </xsl:template>
             <xsl:template match="test">
              <p style="color:#ff0000"><xsl:value-of select="."/></p>
             </xsl:template>
            </xsl:stylesheet>
            -------------------------

            Grüße
            Thomas

            --
            Surftip: kennen Sie schon Pipolino's Clowntheater?
            http://www.clowntheater-pipolino.net/