Неожиданные результаты от XSLT в Chrome - PullRequest
1 голос
/ 07 марта 2011

В написанной мной программе части веб-интерфейса отправляются клиенту в виде XML и преобразуются в фрагменты HTML с использованием Javascript и XSLT. Это отлично работает в Firefox (4.0b12) и Opera (10.63), но в Chrome (9.0.597.107) результаты не такие, как ожидалось.

XSLT

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent ="yes"/>
  <xsl:template match ="/">
    <xsl:for-each select="queue/download">
      <xsl:choose>
        <xsl:when test="status='downloadError'">
          <xsl:variable name="rowClass">ui-state-error</xsl:variable>
          <xsl:variable name="iconClass">ui-icon ui-icon-alert</xsl:variable>
          <xsl:call-template name="download">
            <xsl:with-param name="iconClass" select="$iconClass"/>
            <xsl:with-param name="rowClass" select ="$rowClass"/>
          </xsl:call-template>
        </xsl:when>
        <xsl:when test="status='downloadRunning'">
          <xsl:variable name="rowClass">ui-state-highlight</xsl:variable>
          <xsl:variable name="iconClass">ui-icon ui-icon-refresh</xsl:variable>
          <xsl:call-template name="download">
            <xsl:with-param name="iconClass" select="$iconClass"/>
            <xsl:with-param name="rowClass" select ="$rowClass"/>
          </xsl:call-template>
        </xsl:when>
        <xsl:when test="status='downloadComplete'">
          <xsl:variable name="rowClass">downloadComplete</xsl:variable>
          <xsl:variable name="iconClass">ui-icon ui-icon-circle-check</xsl:variable>
          <xsl:call-template name="download">
            <xsl:with-param name="iconClass" select="$iconClass"/>
            <xsl:with-param name="rowClass" select ="$rowClass"/>
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
          <xsl:variable name="rowClass" select ="status" />
          <xsl:variable name="iconClass"/>
          <xsl:call-template name="download">
            <xsl:with-param name="iconClass" select="$iconClass"/>
            <xsl:with-param name="rowClass" select ="$rowClass"/>
          </xsl:call-template>
        </xsl:otherwise>
      </xsl:choose>

    </xsl:for-each>
  </xsl:template>

  <xsl:template name="download">
    <xsl:param name="rowClass"/>
    <xsl:param name="iconClass" />
    <xsl:variable name="id" select ="id"/>
    <xsl:variable name="filename" select ="filename"/>
    <xsl:variable name="comment" select ="comment"/>
    <tr class="{$rowClass}">
      <td class="downloadCheck">
        <input type="checkbox" class="downloadCheckbox" value="{$id}" name="downloadCheckbox"/>
      </td>
      <td class="downloadIcon">
        <span class="{$iconClass}"></span>
      </td>
      <td class="downloadName">
        <a href="#" onclick="showDownloadCommentBox('{$id}','{$filename}', '{$comment}');">
          <xsl:value-of select="filename"/>
        </a>
      </td>
      <xsl:if test="status='downloadError'">
        <td class="dError" colspan="4">
          <xsl:value-of select ="errortext"/>
        </td>
      </xsl:if>
      <xsl:if test ="status!='downloadError'">
        <xsl:variable name="progress" select ="progress"/>
        <td class="downloadProgress">
          <div class="jqProgress" value="{$progress}"></div>
        </td>
        <td class="downloadTimeLeft">
          <xsl:value-of select ="timeremaining"/>
        </td>
        <td class="downloadSize">
          <xsl:value-of select ="size"/>
        </td>
        <td class="downloadSpeed">
          <xsl:value-of select ="speed"/>
        </td>
      </xsl:if>
    </tr>
  </xsl:template>
</xsl:stylesheet>

XML

<queue>
   <name>test</name>
   <renderer>downloadQueue</renderer>
   <xsl>/xslt/downloadQueue.xslt</xsl>
   <status>suspended</status>
   <startMode>manual</startMode>
   <downloadDirectory>C:\Users\William\Programming\SCRAMDownloader\Trunk\bin\</downloadDirectory>
   <download>
       <filename>test.zip</filename>
       <progress>0.00%</progress>
       <speed>-</speed>
       <timeremaining>-</timeremaining>
       <status>downloadSuspended</status>
       <size>119.68 MB</size>
       <id>8976170e-1f4b-4b79-8901-5a4191e2c07d</id>
       <comment/>
   </download>
</queue>

Ожидаемые результаты (Firefox)

<tr class="downloadSuspended">
    <td class="downloadCheck"><input type="checkbox" class="downloadCheckbox" value="8976170e-1f4b-4b79-8901-5a4191e2c07d" name="downloadCheckbox"></td>
    <td class="downloadIcon"><span class=""></span></td>
    <td class="downloadName"><a href="#" onclick="showDownloadCommentBox('8976170e-1f4b-4b79-8901-5a4191e2c07d','test.zip', '');">test.zip</a></td>
    <td class="downloadProgress"><div class="jqProgress ui-progressbar ui-widget ui-widget-content ui-corner-all" value="0.00%" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="ui-progressbar-value ui-widget-header ui-corner-left" style="width: 0%;"></div></div></td>
    <td class="downloadTimeLeft">-</td>
    <td class="downloadSize">119.68 MB</td>
    <td class="downloadSpeed">-</td>
</tr>

Результаты в Chrome

<input type="checkbox" class="downloadCheckbox" value="8976170e-1f4b-4b79-8901-5a4191e2c07d" name="downloadCheckbox">
<span class=""></span>
<a href="#" onclick="showDownloadCommentBox('8976170e-1f4b-4b79-8901-5a4191e2c07d','test.zip', '');">test.zip</a>
<div class="jqProgress ui-progressbar ui-widget ui-widget-content ui-corner-all" value="0.00%" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="ui-progressbar-value ui-widget-header ui-corner-left" style="width: 0%; "></div></div>
-
119.68 MB
-

Обратите внимание на отсутствующие теги <tr> и <td>

Есть идеи, что я делаю не так? (извинения за чрезмерно длинный пост)

Ответы [ 2 ]

1 голос
/ 07 марта 2011

Есть идеи, что я делаю не так?

Ничего , за исключением, возможно, использования глючного процессора XSLT (независимо от того, что использует Google-Chrome).

Я проверил это преобразование на следующих девяти различных процессорах XSLT (1.0 и 2.0), и результат для всех них правильный:

  • MSXML 3,4,6

  • ALtova (XML SPY)

  • .NET (XslCompiledTransform и XslTransform)

  • Saxon (6.5.4 и9.1.05)

  • XQSharp

0 голосов
/ 08 ноября 2011

У меня просто была такая же проблема.Я предполагаю, что проблема в том, что chrome проверяет результаты синтаксического анализа xslt и ожидает окружение и.Если вы возьметесь за свои, я думаю, что проблема будет решена (это работает для меня ...)

Затем вы можете удалить тег из результата, если он вам не нужен ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...