Announcement

Collapse
No announcement yet.

verschachtelte Dokument Referenzierung

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

  • verschachtelte Dokument Referenzierung

    Hi

    hab grad nen kleines Denkproblem, hoffe hier kann mir geholfen werden.

    Ich habe eine Daten.xml, eine Template.xml und eine Transform.xsl.
    In der Template datei werden Formulare und aussehen beschrieben. In der Daten.xml stehen die eingetragenen Werte einzelner Formularelemente. Die Transform.xsl transformiert das ganze dann in html für die darstellung.

    Da eine Templatedatei von mehreren Datendateien verwendet wird, ist die Daten.xml die aufrufende Datei, welche das xsl einbindet.
    Im xsl wird jedoch sofort die Template.xml eingebunden (pfad definiert in Daten.xml), da das template ja für die ausgabe benötigt wird.
    Nun wird das Template transformiert und das html formular erstellt. Wie greife ich aber an der Stelle wo ich die Datenzuordnung machen will wieder auf meine Daten.xml zu?
    Ganz grobe Geschichten wie '<xsl:value-of select="//Date[@ID = $tempID]"/>' führen zu keinem Ergebnis. (bin wohl in dem Moment noch im anderen document)

    hier mal ein kleiner dirty Abriss des ganzen:
    Code:
    <xsl:for-each select="document($tmpl_filename)/Layout/Group">
      <xsl:attribute name="value">
                <xsl:variable name="tempID" select="./@ID"/>
                <xsl:value-of select="$tempID"/>
         ******       <xsl:value-of select="//Date[@ID = $tempID]"/>
              </xsl:attribute>
    </xsl:for-each>
    ***** zeigt den Knackpunkt. Date ist ja in der aufrufenden Daten.xml definiert, an dieser Stelle befinden wir uns jedoch in Template.xml.
    Ich muss also den Bezug zu Daten.xml wieder herstellen. Dies geht jedoch nicht per document(), da Daten.xml aus einer Datenbank geholt wurde und nicht als referenzierbare Datei vorliegt.
    Weitere Einschränkungen sind, dass das Ganze Offline (also ohne Serverseitige Sprachen) und somit mit dem XSL Prozessor des Browsers funktionieren soll.
    Hm, hoffe es verständlich erklärt zu haben, und hoffe auf Hilfe.

    Grüße, ich

  • #2
    Hi

    OK, gestern abend ist mir ne Blitzidee gekommen.
    Das ganze ist ziemlich von hinten durch die brust ins knie.... aber es funktioniert schonmal.

    Ich lade einfach zu Beginn im xsl das Data.xml in eine globale Variable!
    Dann kann man auch innerhalb des for-each was das andere Dokument durchgeht auf den variableninhalt und somit auf data.xml zugreifen.

    die entsprechenden Code-Zeilen der vollständigkeit halber:
    Code:
    <xsl:variable name="tmp_datadoc" select="/root"/>
    <xsl:for-each select="document($tmpl_filename)/Layout/Group">
      <xsl:attribute name="value">
                <xsl:variable name="tempID" select="./@ID"/>
                <xsl:value-of select="$tempID"/>
         ******       <xsl:value-of select="$datadoc//Date[@ID = $tempID]"/>
              </xsl:attribute>
    </xsl:for-each>
    Falls jemandem eine schönere Lösung einfällt würde sie mich trotzdem interessieren!!

    Comment


    • #3
      Unter XSLT 2.0 gäbe es die Möglichkeit, mittels document-uri(/) den Zugang zum Dokument in einer globalen Variable zu hinterlegen. Alternativ könnte vielleicht die Verarbeitung umgekehrt werden, internes vs. externes Dokument.

      Comment


      • #4
        hi

        ja, die umkehrung brachte mich ja erst zu diesem Problem
        fakt ist, dass die Daten.xml aus einer SQL Datenbank kommen müssen, und Template und XSL hingegen im Filesystem liegen. Und genau wegen diesem Umstand geht leider die Umkehrung nicht, da dann im Template die Daten.xml per document() eingebunden werden müssten. Online würde das ganze ja noch prima über einen Webservice klappen, der mir das XML aus der Datenbank zurückliefert, aber Offline würde der Verweis document('http://server/getXML.jsp') nicht funktionieren. Deshalb dieses rumgefrickel

        Comment

        Working...
        X