<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
<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']"/>&width=182&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>
我正在尝试显示这个员工表 - 但它不会将xslt保存在Umbraco中? 给出了这个错误: System.Xml.XmlException:第18行的'table'开始标记与'xsl:template'的结束标记不匹配。第26行,第3位。
这是我想要制作的HTML:
<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:th@bevola.dk>th@bevola.dk</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:th@bevola.dk>th@bevola.dk</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:th@bevola.dk>th@bevola.dk</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:th@bevola.dk>th@bevola.dk</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:th@bevola.dk>th@bevola.dk</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:th@bevola.dk>th@bevola.dk</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:th@bevola.dk>th@bevola.dk</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:th@bevola.dk>th@bevola.dk</a></strong></span></span></div>
</span></td>
<td></td>
<td></td>
</tr>
</table>
答案 0 :(得分:3)
错误非常明确:您有一个模板,其中有一个<table>
开始标记,但没有结束标记。
在另一个模板中,您有</table>
结束标记。但是XSLT不会独立输出开始和结束标记。它输出一个节点树,由table
个元素等节点组成。然后,该节点树被序列化为格式良好的XML。
尝试独立输出开始和结束标记通常意味着您正在尝试解决分组问题。 XSLT 可以完成此任务的方法,具体取决于您尝试分组的内容。一旦你获得了正确的分组,就可以在同一个模板中输出整个表格,并且你不会遇到开始标记/结束标记问题。
为了帮助我们解决分组任务的问题,请告诉我们输入XML的样子,以及每个表应该对应的内容。 (或者你可以谷歌XSLT分组。)实际上,你正在生成一个表开始标记,然后尝试为名为“node”的$ afdelinger的每个元素子项输出一个表结束标记。这显然不是你的意思。 如果您想要为每个$ afdelinger / node 设置一个单独的表,为什么不将<table>
开始标记移动到“medarbejdere”模板中? 如果您只需要一个表格,请将</table>
结束标记移至match="/"
模板的末尾。
答案 1 :(得分:1)
您已在第一个模板中打开了表格标签,但未在该模板中将其关闭。因此,您的格式错误的XML无效。
<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>
此外,表的子元素必须是以下之一:col, thead, tbody, tfoot, tr
h3
不是表的有效(直接)子元素