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
Hi Thomas,
vielen Dank für die sehr hilfreiche Antwort!
Die Möglichkeit mit dem Prefix im XML-Dokument fällt leider weg, bleibt also nur noch die Änderung des XSLT-Codes. Hast du vielleicht noch ne Idee wie man das mit dem <xsl:apply-templates /> hinbekommen könnte? Ich brauch das in dieser Reihenfolge:
<body>
<xsl:apply-templates select="*[name()='Head']"/>
<xsl:apply-templates select="*[name()='BOM']"/>
<xsl:apply-templates select="*[name()='Head']" mode="toc"/>
</body>
wie wähle ich aber diese Templates aus? So geht das nicht.
Ich muss doch dann bei jedem einzelnen Element mit
<h1><xsl:value-of select="*[name()='ELEMENT']"/></h1>
den entsprechenden Wert rausholen oder???
Irgendwie ziemlich scheisse dass des nicht gscheit unterstützt wird!
Nochmals vielen vielen Dank, ohne dich wäre ich da nie draufgekommen, besonders weils dazu im Netz nichts zu geben scheint!
Schönen Tag noch!
Cu Bernd