Не могу заставить работать таблицу в XSLT - PullRequest
0 голосов
/ 13 декабря 2010
<?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>

Я пытаюсь отобразить эту таблицу сотрудников - но она не сохранит xslt в Umbraco?Выдает эту ошибку: System.Xml.XmlException: начальный тег «table» в строке 18 не соответствует конечному тегу «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>

Ответы [ 2 ]

3 голосов
/ 13 декабря 2010

Ошибка проясняет ситуацию: у вас есть шаблон, в котором у вас есть <table> начальный тег, но нет конечного тега для него.

В другом шаблоне у вас есть конечный тег </table>. Но XSLT не выводит начальный и конечный теги независимо. Он выводит дерево узлов, состоящее из узлов, таких как table элементы. Затем это дерево узлов сериализуется как правильно сформированный XML.

Попытка вывести начальный и конечный теги независимо обычно означает, что вы пытаетесь решить проблему группировки. Есть способы сделать это, что XSLT может выполнить, в зависимости от того, что вы пытаетесь сгруппировать по. Как только вы правильно настроите группировку, вы можете вывести всю таблицу в пределах одного и того же шаблона, и у вас не будет проблем с начальным тегом / конечным тегом.

Чтобы мы могли помочь с решением задачи группировки, дайте нам знать, как выглядит входной XML-файл и чему должна соответствовать каждая таблица. (Или вы можете группировать Google XSLT.) Как таковой, вы создаете один начальный тег таблицы, а затем пытаетесь вывести конечный тег таблицы для каждого дочернего элемента $ afdelinger с именем "node". Это явно не то, что вы имели в виду. Если вы хотите отдельную таблицу для каждого $ afdelinger / узла , почему бы не переместить начальный тег <table> в шаблон "medarbejdere"? Если вам нужна всего одна таблица, переместите конечный тег </table> в конец шаблона match="/".

1 голос
/ 13 декабря 2010

Вы открыли тег таблицы в своем первом шаблоне, но не закрыли его в этом шаблоне.Поэтому у вас неверный 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 не является допустимым (прямым)дочерний элемент таблицы

...