Ich verwende XSL-Vorlagen, um als Webseitenvorlagen für ein Webframework zu dienen, wobei die Endausgabe XHTML 1.0 Strict ist; Es nimmt XML-Eingabe und gibt das XHTML aus. Es funktioniert perfekt bis auf ein Problem - die Endausgabe gibt auch einen XML-Knoten statt nur den Inhalt aus. Hier ist die grundlegende XML (einige Elemente fehlen, aber das gesamte Design ist das gleiche):Entfernen Sie den XML-Wurzelknoten in der XSL-Vorlagenausgabe
<Page>
<PageScript>
<Script>./js/myscript.js</Script>
</PageScript>
<PageCSS>
<CSS>./css/mycss.css</CSS>
</PageCSS>
<PageContent>Blah blah blah</PageContent>
</Page>
Hier ist die XSL-Vorlage
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:response="http://www.ntforl.com/"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:lang="en">
<xsl:output
method="xml"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
/>
<xsl:template match="//PageCSS">
<xsl:for-each select="CSS">
<link type="text/css" rel="stylesheet">
<xsl:attribute name="href">
<xsl:value-of select="." />
</xsl:attribute>
</link>
</xsl:for-each>
</xsl:template>
<xsl:template match="//PageScript">
<xsl:for-each select="Script">
<script type="text/javascript">
<xsl:attribute name="src">
<xsl:value-of select="." />
</xsl:attribute>
</script>
</xsl:for-each>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="/" disable-output-escaping="yes">
<html>
<head>
<title>
<xsl:value-of select="//PageTitle" />
</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<link type="text/css" rel="stylesheet" href="template/style/globalStyle.css" />
<link type="text/css" rel="stylesheet" href="template/style/standards.css" />
<xsl:apply-templates select="//PageCSS" />
<script type="text/javascript" src="template/js/some_file.js"></script>
<xsl:apply-templates select="//PageScript" />
</head>
<body onload="">
<div id="container">
<div id="top">
<div class="clear" />
</div>
<div id="main">
<div class="left" style="width: 708px; margin-top: 10px;">
<h1 class="center">
<xsl:value-of select="//PageTitle" />
</h1>
</div>
<div class="clear" />
<div id="rightPane">
<div id="rightPaneContent">
<xsl:apply-templates select="//PageContent" />
</div>
<img src="template/images/mainBgBottom.png" alt="" />
</div>
</div>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Das Problem in der Pagecontent befindet, und es geschieht nur mit der PageContent. Wenn die Transformation ausgeführt wird, gibt die Vorlage im XHTML-Code
<PageContent xmlns=""> node content </PageContent>
aus. Ich muss wissen, wie ich es loswerden kann, damit ich ein gültiges XHTML 1.0 Strict-Dokument haben kann.
Die seltsame Sache ist, dass der PageContent-Knoten der einzige Knoten ist, um dies zu tun, kein anderer Knoten bekommt Inhalt mit dem Knotennamen in der Ausgabe verpackt. Was ist der Grund für dieses Verhalten?
Vielen Dank, diese sind sehr hilfreich. Ich habe noch eine andere Frage. Diese lösen das Problem mit dem Elternknoten, aber der erste Knoten innerhalb des PageContent erhält ein 'xlmns =" "' - Attribut, und ich war neugierig, ob das irgendwie übrig sein könnte. Wenn dies hilft, hält der PageContent-Knoten xhtml - es ist im Grunde der Hauptteil der Seite in xhtml - das Ergebnis der Ausführung des vom Benutzer angeforderten Prozesses. –