Announcement

Collapse
No announcement yet.

Problem mit copy-of von document() mit std.namespace

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

  • Problem mit copy-of von document() mit std.namespace

    XSL Version: 2.0
    Parser: Saxon 9

    Hallo,
    Ich habe ein Problem bei der Zusammenführung zweier (oder mehrerer) Xml-Dokumente über ein XSLT Script.
    Bisher hatten beide Xml-Dokumente keine Namespaces und keine Prefixe.
    Beide Dokumente konnte ich einfach mit (in $xmlDirectory und @href steht der Pfad drin)
    HTML Code:
    xsl:copy-of select  = "document(concat($xmlDirectory, @href))"
    einlesen, die zusammenpassenden Elemente suchen und in ein neues Dokument ausgeben.
    Jetzt wurde in einem der Dokumente ein Standard-Namespace eingeführt, und meine Transformation geht jetzt nicht mehr. Fehler gibt es keine, aber es werden nur noch die Daten von Xml1 ausgegeben, die dazugehörigen Daten aus Xml2 (da wo das Standard-Namespace jetzt drin ist) werden nicht mehr gefunden.
    Ich habe schon probiert an den copy-of Befehl das copy-namespaces-Attribut anzuhängen mit Wert "no", leider hat das nichts gebracht.
    Ich kann das Standardnamespace ja aber auch nicht in die Xsl übernehmen weil die erste Xml-Datei es nicht hat (wenn ich das mache bekomme ich lauter Fehler bei Transformationsaufruf).
    Kriegt man das irgendwie gebacken?
    In diesem Zusammenhang verwende ich das Xml mit Standard-Namespace:
    HTML Code:
    <!-- hier wird das erste Xml Dokument wird geladen, Code hab ich weggelassen da der Teil geht -->
    
    <!-- nun lade ich nacheinander die Dateien mit dem Standard-Namespace -->
    <xsl:for-each select = "$Docs/Data">
                <xsl:variable name = "Doc">
                  <xsl:copy-of select  = "document(concat($xmlDirectory, @href))" copy-namespaces = "no" />
                </xsl:variable>
    
    <!-- weiter: die Daten jedes Docs mit den aus dem ersten Xml-Dokument verknüpfen...hab ich der Einfachheit halber weggelassen da hier nicht relevant -->
    ...
    Kann mir jemand weiterhelfen? Beim googlen bin ich leider nicht weitergerkommen.

    gruß & danke
    sth_Weird
    Zuletzt editiert von sth_Weird; 23.07.2009, 14:31.
    Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht

  • #2
    Da offenbar XSLT 2.0 eingesetzt wird, kann xpath-default-namespace="..." global bei xsl:stylesheet oder bei anderen xsl-Elementen angegeben werden. Unter XSLT 1.0 besteht die Möglichkeit, den Namensraum im XSLT-Dokument mit einem beliebigen noch nicht verwendeten Prefix zu deklarieren und dann dieses Prefix zur Ansprache der jeweiligen Elemente zu verwenden.

    Comment


    • #3
      hallo & danke für die schnelle Antwort, wenn sie mir leider auch bisher noch nicht weitergeholfen hat.
      Habe etwas gegoogelt nach "xpath-default-namespace" und gelesen, dass man das überall dazuschreiben kann.
      Ich habe es nun probiert, einmal mit dem Default-Namespace des zweiten Xml-Dokuments, und einmal mit nem leeren String, an diesen Stellen:
      - im Stylesheet direkt
      - da wo ich das xsl:copy-of vom Dokument mache.
      (wenn erforderliche kann ich die entsprechenden Zeilen auch noch posten, nur halt nicht die ganzen Dateien weil die intern sind).
      Letzteres hatte überhaupt keine Auswirkungen, egal welche Variante. Die passenden Datensätze im zweiten Dokument werden immer noch nicht gefunden.
      Wenn ich im Stylesheet direkt einen leeren String anbiete dann hat das auch keine Auswirkungen. Schreiben ich den Default-Namespace des zweiten Xml-Dokuments rein dann ist das Result-Dokument leer, d.h. es kann das erste nicht mehr lesen (dieses hat ja weder (Standard)-Namespace noch Prefixe).
      Hast du vielleicht noch eine andere Idee?
      Gruß
      sth_Weird

      PS: Parser und XSL Version habe ich im Originalposting ergänzt, hatte ich vorhin vergessen sorry...
      Zuletzt editiert von sth_Weird; 23.07.2009, 15:06.
      Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht

      Comment


      • #4
        Baue mal einen minimalen Testcase zum Nachvollziehen des Problems.

        Comment


        • #5
          Hallo,
          danke für die Antwort, ich hänge gerade an einem anderen Problem (auch schon hier gepostet) das höherprio eingestuft wurde und dieses hier muss erst mal warten...aber sobald ich wieder hier dransitz werd ich mal einen kurzen Testcase zusammenstellen.
          sth_Weird
          Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht

          Comment

          Working...
          X