Mischen

Inspector

Erfahrenes Mitglied
Hi,

ich möchte gerne folgendes machen:

1. Ich habe eine simple xhtml-Datei mit minimalistischem Aufbau:
Code:
<html>
    <head><tilte>wasauchimmer</tilte></head>
    <body>Und hier der Inhalt, was auch immer</body>
</html>

2. Desweiteren habe ich eine weitere Datei namens "template.html". Dies ist eine xhtml-Datei mit ausführlichem Header, Doctype und den ganzen Kram.

3. Auf die minimalistische Datei möchte ich nun ein xsl Stylesheet anwenden, das mir diese beiden Dateien zusammenmischt. Dazu möchte ich als Erstes mal sämtliche Attribute des html-Elements der Template-Datei im Resultat haben. Auso im Prinzip etwa:
Code:
<xsl:template match="/">
	<xsl:apply-templates select="h:html"/>
</xsl:template>

<xsl:template match="html">
	<xsl:element name="html" namespace="http://www.w3.org/1999/xhtml">
		<xsl:for-each select="document('template.html')/html/@*">

		</xsl:for-each>
	</xsl:element>
</xsl:template>

Leider bekomme ich als Resultat gar Nix. Auch nicht die Platzhalter-Fragezeichen oder ein html-Element oder was auch immer, lediglich die xml-Kopfzeile. Wo steckt da der Denkfehler, bez. wie mache ich das?
 
Hi,

so, einen Teil der Antworten habe ich inzwischen gefunden. Unter Windows brauche ich sowohl beim Template als auch beim Aufruf des Templates den namespace prefix, unter Linux darf der in beiden Fällen nicht dabei sein. Und das, obwohl ich in beiden Fällen die Java-Version von xalan verwende. Merkwürdig, aber was soll's.

Aber es bleiben Fragen übrig. Insbesondere hat das html-Element des xhtml-Templates etliche namespace-Attribute. Genauer gesagt, momentan zwei: html und svg. Ich möchte irgendwie beide namespace-Attribute in das Resultat bekommen, leider bislang ohne Erfolg.
 
Hi,

naja, inzwischen habe ich vermutlich eine Lösung gefunden. Ob sie besonders "richtig" ist, weiß ich nicht, aber sie scheint zu funktionieren. Zumindest mal unter Windows.

Bisheriger Code (Ausschnitt):
Code:
<xsl:template match="h:html">
	<xsl:element name="html" namespace="http://www.w3.org/1999/xhtml">
		<xsl:for-each select="document('template.html')/h:html/@*">
			<xsl:copy/>
		</xsl:for-each>
		<xsl:apply-templates select="//object[@type='image/svg+xml'][1]" mode="IE_HACK"/>
		<xsl:apply-templates select="h:head"/>
	</xsl:element>
</xsl:template>
Damit war ums verrecken kein zweiter namespace in das html-Element reinzubekommen.

Neuer Code (gleicher Ausschnitt):
Code:
<xsl:template match="h:html">
	<html>
		<xsl:for-each select="document('template.html')/h:html/@*">
			<xsl:copy/>
		</xsl:for-each>
		<xsl:apply-templates select="//object[@type='image/svg+xml'][1]" mode="IE_HACK"/>
		<xsl:apply-templates select="h:head"/>
	</html>
</xsl:template>

Damit sind dann plötzlich beide benötigten Namespaces drin. Mal abwarten, ob das noch irgendwelche Nebenwirkungen hat.
 
Zurück