Firefox无法解析XSLT,IE9只是忽略它,帮助调试?

时间:2013-03-11 18:19:16

标签: xml xslt

有人可以帮我调试这个XSLT吗?我不能花太多时间用这个,因为我本周有很多事要做,我已经尝试了至少半个小时,但仍然找不到它有什么问题。我在XSLT方面的技能是有限的,我们对课堂上的工作要求太多了,而且,除了抱怨有关人物(á,é......)之外,Firefox没有太多帮助。

这是一个贴心链接,主要是因为代码太大了:http://pastie.org/6452944

再次,谢谢!

1 个答案:

答案 0 :(得分:3)

一个体面的XML编辑器可能会告诉你问题是什么:

  • 您有一个开放式<table>标记,您应该有一个结束</table>标记。
  • &eq;在标准XML中毫无意义;你应该使用=
  • <xsl:choose>不允许select属性
  • 使用斜杠结束XPath是违法的。

还有一个逻辑错误:

  • @observaciones = urgente测试@observaciones是否等于节点 urgente(在这种情况下不存在)。您需要使用@observaciones = 'urgente'

当这些修复后,我想它会起作用。这是一个固定版本:

<xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" omit-xml-declaration="yes"/>

  <xsl:template match="/empresa">
    <html>
      <head>
        <title>
          <xsl:value-of select="sede/nombre" />
        </title>
        <link rel="stylesheet" href="empresa.css" />
      </head>
      <body>
        <table>
          <tr class="titulo">
            <td>
              <p>
                <xsl:value-of select="sede/nombre" />
              </p>
            </td>
            <td rowspan="2">
              <img alt="empresa" src="empresa.png" />
            </td>
          </tr>

          <tr class="subtitulo">
            <td>
              <p>Albaran</p>
            </td>
          </tr>

          <xsl:apply-templates select="pedido">
            <xsl:sort select="@id" />
          </xsl:apply-templates>
        </table>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="pedido">
    <tr class="cuerpo">
      <td rowspan="3">
        <span>
          <xsl:value-of select="sucursal/nombre" />
        </span>
        <br />
        <span>
          <xsl:value-of select="sucursal/region" />
        </span>
      </td>
    </tr>

    <tr class="fecha">
      <td>
        <p>
          Albaran con fecha de: <xsl:value-of select="fecha" />
        </p>
      </td>
    </tr>

    <tr class="npedido">
      <xsl:apply-templates select="@id" />
    </tr>
    <tr class="articulos">
      <td>
        <table>
          <tr>
            <th>
              <span>Cod. de articulo</span>
            </th>
            <th>
              <span>N. de unidades</span>
            </th>
            <th>
              <span>Precio por unidad</span>
            </th>
            <th>
              <span>Observaciones</span>
            </th>
          </tr>
          <xsl:apply-templates select="articulo">
            <xsl:sort select="@id" />
          </xsl:apply-templates>
        </table>
      </td>
    </tr>

    <tr class="observaciones">
      <td>
        <xsl:apply-templates select="@observaciones[. = 'urgente' or
                                                    . = 'incompleto']" />
      </td>
    </tr>
  </xsl:template>

  <xsl:template match="articulo">
    <tr>
      <xsl:apply-templates select="@id" />
      <xsl:apply-templates select="@cant" />
      <xsl:apply-templates select="@precioud" />
      <xsl:call-template name="Cell">
        <xsl:with-param name="value" select="@observaciones" />
      </xsl:call-template>
    </tr>
  </xsl:template>

  <xsl:template match="articulo/@* | pedido/@id"
                name="Cell">
    <xsl:param name="value" select="." />
    <td>
      <span>
        <xsl:value-of select="$value" />
      </span>
    </td>
  </xsl:template>

  <xsl:template match="@observaciones">
    <strong>
      <xsl:value-of select="concat(translate(substring(., 1, 1), 'it', 'IT'),
                                     substring(., 2))"/>
    </strong>
  </xsl:template>

</xsl:stylesheet>