2010-12-13 3 views
0
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]> 
<xsl:stylesheet 
version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msxml="urn:schemas-microsoft-com:xslt" 
xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" 
exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets "> 

<xsl:output method="xml" omit-xml-declaration="yes"/> 
<xsl:param name="currentPage"/> 

<xsl:variable name="source" select="umbraco.library:GetXmlNodeById(1127)"/> 
<xsl:variable name="afdelinger" select="umbraco.library:GetXmlNodeById(1128)"/> 


<xsl:template match="/"> 
<table class="medarbejdere"> 

<xsl:for-each select="$afdelinger/node"> 
<h3><xsl:value-of select="@nodeName"/></h3> 
<xsl:call-template name="medarbejdere"> 
<xsl:with-param name="nodeId" select="@id"/> 
</xsl:call-template> 
</xsl:for-each> 
</xsl:template> 

<xsl:template name="medarbejdere"> 

<xsl:param name="nodeId"/> 


<xsl:for-each select="$source/node [@nodeTypeAlias='employee'] [string(data[@alias='umbracoNaviHide']) != '1']"> 

<xsl:variable name="preNodes"> 
<xsl:variable name="relatedContent" select="data[@alias='afd']" /> 

<xsl:variable name="nodeIds" select="umbraco.library:Split($relatedContent, ',')" /> 
<xsl:for-each select="$nodeIds/value"> 
<xsl:if test=". = $nodeId"> 
<xsl:value-of select="."/> 
</xsl:if> 
</xsl:for-each> 
</xsl:variable> 

<xsl:if test="$preNodes != ''"> 
<tr><td> 
<span> 
<img> 
<xsl:attribute name="src">/umbraco/imageGen.ashx?image=/<xsl:value-of select="data[@alias='imageWeb']"/>&amp;width=182&amp;height=122</xsl:attribute> 
<xsl:attribute name="alt"><xsl:value-of select="@nodeName"/> - <xsl:value-of select="data[@alias='position']"/> - <xsl:value-of select="data[@alias='phone']"/> - <xsl:value-of select="data[@alias='email']"/></xsl:attribute> 
</img> 
<div class="info" style="padding-bottom:0px;"> 
<span><strong><xsl:value-of select="@nodeName"/></strong> 
<em style="left:160px;top:5px;"><xsl:value-of select="data[@alias='position']"/></em> 
<span class="kontaktinfo" style="left:160px;top:5px;"> 
<strong style="left:160px;top:5px;"><xsl:value-of select="data[@alias='phone']"/></strong> 
<strong style="left:160px;top:5px;"><a href="mailto:{data[@alias='email']}"><xsl:value-of select="data[@alias='email']"/></a></strong> 
</span> 
</span> 
</div> 
</span></td> 

</tr> 

</xsl:if> 
</xsl:for-each> 
</table> 
</xsl:template> 
</xsl:stylesheet> 

J'essaie d'afficher cette table des employés - mais il ne sauvera pas le xslt à Umbraco? Indique cette erreur: System.Xml.XmlException: La balise de début 'table' de la ligne 18 ne correspond pas à la balise de fin de 'xsl: template'. Ligne 26, la position 3.Impossible d'obtenir la table en XSLT pour travailler

C'est le HTML que je suis en train de faire:

 <h3>Kundeservice</h3> 
    <table class="medarbejdere"> 
    <tr> 
     <td><span><img src="billeder/medarbejdere/jorgen.jpg" width="180" height="122" alt="Lars Meineche - Ansvarlig for Kundeservice - +45 57 66 00 05 - <a href=mailto:[email protected]>[email protected]</a>" /> 
     <div class="info"><span><strong>Lars Meineche</strong><em>Ansvarlig for Kundeservice</em> <span class="kontaktinfo"><strong>+45 57 66 00 05</strong><strong><a href=mailto:[email protected]>[email protected]</a></strong></span></span></div> 
    </span></td> 
     <td><span><img src="billeder/medarbejdere/jorgen.jpg" width="180" height="122" alt="Lars Meineche - Ansvarlig for Kundeservice - +45 57 66 00 05 - <a href=mailto:[email protected]>[email protected]</a>" /> 
     <div class="info"><span><strong>Lars Meineche</strong><em>Ansvarlig for Kundeservice</em> <span class="kontaktinfo"><strong>+45 57 66 00 05</strong><strong><a href=mailto:[email protected]>[email protected]</a></strong></span></span></div> 
    </span></td> 
     <td><span><img src="billeder/medarbejdere/jorgen.jpg" width="180" height="122" alt="Lars Meineche - Ansvarlig for Kundeservice - +45 57 66 00 05 - <a href=mailto:[email protected]>[email protected]</a>" /> 
     <div class="info"><span><strong>Lars Meineche</strong><em>Ansvarlig for Kundeservice</em> <span class="kontaktinfo"><strong>+45 57 66 00 05</strong><strong><a href=mailto:[email protected]>[email protected]</a></strong></span></span></div> 
    </span></td> 
    </tr> 
    <tr> 
     <td><span><img src="billeder/medarbejdere/jorgen.jpg" width="180" height="122" alt="Lars Meineche - Ansvarlig for Kundeservice - +45 57 66 00 05 - <a href=mailto:[email protected]>[email protected]</a>" /> 
     <div class="info"><span><strong>Lars Meineche</strong><em>Ansvarlig for Kundeservice</em> <span class="kontaktinfo"><strong>+45 57 66 00 05</strong><strong><a href=mailto:[email protected]>[email protected]</a></strong></span></span></div> 
    </span></td> 
     <td></td> 
     <td></td> 
    </tr> 
    </table> 

Répondre

1

Vous avez ouvert une étiquette de table dans votre premier modèle, mais pas fermé dans ce modèle. Par conséquent, vous avez malformé XML qui n'est pas valide.

<xsl:template match="/"> 
    <table class="medarbejdere"> 
    <xsl:for-each select="$afdelinger/node"> 
     <h3><xsl:value-of select="@nodeName"/></h3> 
     <xsl:call-template name="medarbejdere"> 
     <xsl:with-param name="nodeId" select="@id"/> 
     </xsl:call-template> 
    </xsl:for-each> 
    <!-- MISSING [/table] tag here --> 
</xsl:template> 

En outre, vos éléments enfants d'une table doit être l'un des éléments suivants: col, thead, tbody, tfoot, tr un h3 n'est pas un élément enfant valide (direct) d'une table

+0

Merci, mais comment entourer l'étiquette de la table? J'essaye depuis un certain temps maintenant mais je ne peux pas vraiment le comprendre .. – Daniel

+0

Vous devrez avoir un modèle qui ouvre et ferme la table, mais à l'intérieur de l'étiquette de table, fait un 'apply-templates' ou' call-template' – scunliffe

+1

@Daniel, mettez '' où @scunliffe a ''. (Voir ma réponse.) – LarsH

3

L'erreur rend tout à fait clair: vous avoir un modèle dans lequel vous avez une balise de début <table> mais pas de balise de fin pour cela.

Dans un autre modèle, vous avez l'étiquette de fin </table>. Mais XSLT ne sort pas les balises de début et de fin indépendamment. Il génère un arbre de nœuds composé de nœuds tels que table. Cet arbre de noeud est ensuite sérialisé en tant que XML bien formé.

Si vous tentez de générer des étiquettes de début et de fin indépendamment, cela signifie généralement que vous tentez de résoudre un problème de regroupement. Il existe des moyens de faire cela que XSLT peut accomplir, en fonction de ce que vous essayez de grouper par. Une fois que vous avez le droit de regrouper, vous pouvez sortir la table entière dans le même modèle, et vous n'aurez pas le problème de balise de début/fin. Pour nous aider à résoudre la tâche de regroupement, dites-nous à quoi ressemble le XML d'entrée et à quoi chaque table doit correspondre. (Ou vous pouvez google groupement XSLT.) Comme c'est le cas, vous produisez un tag de début de table, puis en essayant de sortir un tag de fin de table pour chaque élément enfant de $ afdelinger nommé "noeud". Ce n'est évidemment pas ce que vous vouliez dire. Si vous voulez une table séparée pour chaque $ afdelinger/node, pourquoi ne pas déplacer la balise de début <table> dans le template "medarbejdere"? Si vous ne voulez qu'un seul total de table, déplacez l'étiquette de fin </table> à la fin du modèle match="/",.

+1

+1 Bonne réponse. Déplacez 'table' dans le contenu du modèle nommé' medarbejdere'. –

+0

Salut Lars, essayé de déplacer le à la fin du match = "/" modèle, mais jette et erreur aussi bien. J'ai aussi essayé la suggestion ci-dessous mais maintenant j'ai beaucoup de h3 en haut de la page et ensuite le tableau ci-dessous. Je vais faire un vidage xml maintenant .. – Daniel

+0

@Daniel: allez-vous nous dire quelle est l'erreur? ou est-ce comme le rêve de Nebuchadnezzar, où nous sommes supposés comprendre quelle erreur vous avez eue ainsi que pourquoi c'est arrivé? Veuillez poster votre XSLT mis à jour ainsi que le message d'erreur. – LarsH

Questions connexes