J'utilise des modèles XSL pour servir de modèles de pages Web pour un framework Web, la sortie finale étant XHTML 1.0 Strict; il prend l'entrée XML et sort le XHTML. Cela fonctionne parfaitement à l'exception d'un problème: la sortie de fin envoie également un noeud XML au lieu du contenu. Voici le code XML de base (manque certains éléments, mais la conception d'ensemble est le même):Débarrassez-vous du noeud racine XML dans la sortie du modèle XSL
<Page>
<PageScript>
<Script>./js/myscript.js</Script>
</PageScript>
<PageCSS>
<CSS>./css/mycss.css</CSS>
</PageCSS>
<PageContent>Blah blah blah</PageContent>
</Page>
est ici le modèle XSL
<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>
Le problème réside dans le PageContent, et il se produit uniquement avec le PageContent. Lorsque la transformation est exécutée, le modèle sort
<PageContent xmlns=""> node content </PageContent>
dans le XHTML. J'ai besoin de savoir comment m'en débarrasser afin que je puisse avoir un document XHTML 1.0 Strict valide. La chose étrange est que le nœud PageContent est le seul nœud à le faire, aucun autre nœud ne l'obtient avec le nom du nœud dans la sortie. Quelle est la raison de ce comportement?
Merci à tous, ils sont très utiles. J'ai une autre question cependant. Ceux-ci se débarrassent du problème de nœud parent, mais le premier nœud à l'intérieur du PageContent obtient un attribut 'xlmns =" "', et j'étais curieux de savoir si cela pouvait être laissé de quelque façon que ce soit. Si cela vous aide, le nœud PageContent contient xhtml - c'est la partie principale de la page dans xhtml - le résultat de l'exécution du processus demandé par l'utilisateur. –