Announcement

Collapse
No announcement yet.

Lösung für unmögliche dynamische Imports

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

  • Lösung für unmögliche dynamische Imports

    Hallo zusammen,

    ich habe eine XML-Datei mit mehreren
    Code:
    <service name="..." protocol="protocolName">...</service>
    Elementen.
    Ich möchte diese nun transformieren. Die Regeln für die Transformation sollen jeweils in einer entsprechenden Datei stehen, also nach dem Beispiel so sinngemäß
    Code:
    ../protocolName.xsl
    Ich habe mittlerweile schon raus bekommen das man keine dynamischen imports machen kann. Das wäre hier ja optimal.
    Deshalb nun meine Frage wie ich dieses Problem am Besten lösen kann. Ich habe zwar mehrere Ideen, aber meine Nachforschungen diesbzgl. kommen nicht voran und ich habe gerade erst mit xml & co angefangen. Trotzdem hier meine prinzipiellen Ideen:
    1. Vorverarbeiten der Datei und extrahieren der Protokolle, um sie in das URI-Format zu bringen und als Parameter bei der eigentlichen Transformation zu übergeben. Keine Ahnung ob und wie das geht. Insbesondere wie ich dann den jeweilig richtigen Parameter identifiziere.
    2. (Hab ich in einem anderen Forum gelesen) Eine eigene Funktion (in einem extra xsl-Dokument) schreiben, die protocolName in die entsprechende URI wandelt. Ich kann jedoch keine Informationen darüber finden wie man eigene Funktionen schreibt. Ich finde immer nur die klassischen XSLT Einführungen in denen so etwas nicht steht.

    Vielen Dank schon mal im Voraus
    Basti

  • #2
    Die bei xsl:include bzw. xsl:import zugewiesenen Stylesheets werden geladen bevor überhaupt eine Abarbeitung des aktuellen Stylesheets erfolgt. Evtl. hilft die Verwendung von document(...) zum Zugriff auf weitere XML-Dokumente.

    Funktionen lassen sich unter XSLT 2.0 so umsetzen (siehe z. B. meine kleine mathematische Bibliothek):

    Code:
    <xsl:function name="ns:fktname" as="xs:typ">
      <xsl:param name="p1" as="xs:typ"/>
      <xsl:param name="P2" as="xs:typ"/>
      <!-- Verarbeitung von p1 und p2 ... Ausgabe z. B. mit xsl:value-of -->
    </xsl:function>
    Unter XSLT 1.0 lassen sich benannte Templates verwenden, welche mit xsl:call-template (rekursiv) aufgerufen werden können.

    Comment


    • #3
      Danke, der Hinweis mit document() hat mir schon sehr weiter geholfen. Nun stehe ich vor einem anderen Problem, aber dafür mache ich lieber einen neuen Thread auf, da es nicht all zu viel hiermit zu tun hat.

      Comment

      Working...
      X