Thomas J.S.: XSLT zusammen mit XML-Schema ?

Beitrag lesen

Hallo,

Hi Thomas,
vielen Dank für deine Antwort, aber was genau meinst du denn?
Könntest du ein kleines Beispiel beschreiben oder so?

Meinst du beim template?
So hab ichs schon mal versucht, ging aber nicht!

<xsl:template match="Article @xsi:schemaLocation='http://www.bernd.de Article.xsd'
@xmlns='http://www.bernd.de'
@xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'">

So kann es nicht gehen.

Oder meinst du irgendwas anderes?

Ja ich meinte was anderes.
Dein bzw. das Problem ist der 'default' Namesraum in deinem XML (xmlns="http://www.bernd.de") genauer: XSLT 1 hat damit Probleme.

Du hast zwei Möglichkeiten, entweder du gibst jedem deiner Elemente ein Prefix:
<B:Article xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bernd.de/Article-Schema.xsd" xmlns:B="http://www.bernd.de">
    <B:data>bla</B:data>
 </B:Article>

dann geht es so:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:B="http://www.bernd.de" exclude-result-prefixes="B">
    <xsl:template match="/">
        <html>
            <head>
                <title>Untitled</title>
            </head>
            <body>
                <xsl:apply-templates />
            </body>
        </html>
    </xsl:template>
    <xsl:template match="B:Article">
        <div>
            <xsl:apply-templates />
        </div>
    </xsl:template>
    <xsl:template match="B:data">
        <h1><xsl:value-of select="."/></h1>
    </xsl:template>
</xsl:stylesheet>

oder du musst in deinem XSL "herumgurken", und zwar so:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/">
        <html>
            <head>
                <title>Untitled</title>
            </head>
            <body>
                <xsl:apply-templates />
            </body>
        </html>
    </xsl:template>
    <xsl:template match="*[name() = 'Article']">
        <div>
            <xsl:apply-templates />
        </div>
    </xsl:template>
    <xsl:template match="*[name() = 'data']">
        <h1><xsl:value-of select="."/></h1>
    </xsl:template>
</xsl:stylesheet>

Erst XSLT 2 wird dieses Problem beheben.

Grüße
Thomas

--
Surftip: kennen Sie schon Pipolino's Clowntheater?
http://www.clowntheater-pipolino.net/