Announcement

Collapse
No announcement yet.

nochmal: xslt und namespaces

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

  • nochmal: xslt und namespaces

    Hallo,
    mein Problem ist ganz ähnlich dem in diesem Post schon beschriebenen: ich möchte mit xsltproc Teile aus einem XML kopieren, die u.a. Elemente mit Default-Namespaces enthalten.
    Minimalbeispiel XML:

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <OAI-PMH xmlns="http:www.einURI.de">
    <listRecords>
    <element>
    <erstesKind>erster Textknoten</erstesKind>
    </element>
    <element>
    <erstesKind>zweiter Textknoten</erstesKind>
    </element>
    </listRecords>
    </OAI-PMH>
    Minimalbeispiel XSL:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
                                xmlns:my="http://www.einURI.de">
      <xsl:template match="/my:OAI-PMH">
        <xsl:copy-of select="./listRecords"></xsl:copy-of>
      </xsl:template>
    </xsl:stylesheet>
    Leider werden dadurch aber nur die Textknoten kopiert:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    
    
    
    erster Textknoten
    
    
    zweiter Textknoten
    Daraus, dass ich dafür noch keine Lösung gefunden habe, schließe ich mal, dass ich irgendeinen ziemlich trivialen Denkfehler mache? Könnt Ihr mir auf die Sprünge helfen?
    Besten Dank vorab!
    Parzival

  • #2
    Alle Elemente sind in dem Namensraum, der für das Wurzelelement deklariert wurde, daher musst du mit XSLT/XPath 1.0 den Präfix "my" vor jedem Elementnamen verwenden, also "my:listRecords".

    Comment


    • #3
      Hallo,
      besten Dank für die rasche Antwort! Das sind so die Kleinigkeiten, die mir leider immer noch entgehen :-(
      Wenn ich mein XSLT entsprechend nachbessere:
      Code:
      <?xml version="1.0" encoding="UTF-8"?>
      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
      xmlns:my="http://www.einURI.de">
      <xsl:template match="/my:OAI-PMH">
      <xsl:copy-of select="./my:listRecords"></xsl:copy-of>
      </xsl:template>
      </xsl:stylesheet>
      bleibt das Ergebnis allerdings das gleiche: es werden immer noch nur die Textknoten kopiert. Es muss wohl wirklich an dem Namepace liegen, denn ein Beispiel ohne die Namespaces liefert das gewünschte Ergebnis. Irgendwo scheint es also noch zu haken?

      Viele Grüße

      parzival

      Comment


      • #4
        Wenn du im XML Dokument wirklich
        Code:
        OAI-PMH xmlns="http:www.einURI.de"
        und dann im XSLT aber
        Code:
         
         xmlns:my="http://www.einURI.de"
        kann das nie funktionieren, die URL muss schon genau die selbe sein. Also entweder im XML Dokument die URL korrigieren oder im XSLT die URL so anpassen, dass sie der im XML Dokument exakt entspricht.

        Comment


        • #5
          Ach Mensch! Manchmal bin ich so bescheuert! Das kann man ja nicht mal mehr als Anfängerfehler durchgehen lassen - und dafür so ein Aufriss!

          Ganz herzliches Danke Euch beiden für die "Nachhilfe"!

          Viele Grüße

          parzival

          Comment

          Working...
          X