shs: XSLT: Zugriff auf Elemente in Namespace

Hallo,
ich habe Probleme, in einem XSLT-Skript auf Elemente in einem Namespace zuzugreifen. Ich teste das Skript mit Firefox/1.5.0.4 (Mozilla/5.0 (X11; U; Linux i686; de; rv:1.8.0.4) Gecko/20060508).

Bei folgender XML-Datei (test.xml):

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xslt"?>
<test xmlns:dc="http://purl.org/dc/elements/1.1/">
  dc:creatorTest</dc:creator>
</test>

zeigt mir Firefox bei diesem Stylesheet (test.xslt):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" version="1.0" indent="yes" encoding="ISO-8859-1" />
  <!-- Startvorlage -->
  <xsl:template match="/test">
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    <head>
      <title><xsl:value-of select="dc:creator" /></title>
    </head>
    <body>
      <xsl:value-of select="dc:creator" />
    </body>
  </html>
  </xsl:template>
</xsl:stylesheet>

die Fehlermeldung:

Fehler beim Laden des Stylesheets (null)

Lasse ich dagegen die Namespace-Präfixe sowohl in der XML- als auch in der XSLT-Datei weg, wird wie erwartet "Test" ausgegeben.

Damit aber noch nicht genug, denn wenn ich der XML-Datei einen eigenen Namespace zuweise:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xslt"?>
<test xmlns="http://localhost" xmlns:dc="http://purl.org/dc/elements/1.1/">
  dc:creatorTest</dc:creator>
</test>

Dann habe ich überhaupt keine Möglichkeit mehr - mit oder ohne Präfixe -, auf die Elemente zuzugreifen.

Mein Buch (XSLT und XPath von Marco Skulschus und Marcus Wiederstein) schweigt zu diesem Thema und die Dokumentation habe ich erfolglos durchforstet.

Hat jemand einen Tipp, was hier falsch läuft?

Vielen dank!

shs

  1. Ich habe die Ursache des Problems inzwischen gefunden:

    Der Namespace muss natürlich auch im XSLT-Stylesheet definiert werden, damit das Präfix in dieser Datei bekannt ist:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
      <xsl:output method="html" version="1.0" indent="yes" encoding="ISO-8859-1" />
      <!-- Startvorlage -->
      <xsl:template match="/test">
      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
        <head>
          <title><xsl:value-of select="dc:creator" /></title>
        </head>
        <body>
          <xsl:value-of select="dc:creator" />
        </body>
      </html>
      </xsl:template>
    </xsl:stylesheet>

    Die Fehlermeldung des Firefox war aber auch nicht sehr aufschlussreich.