-1

有人可以帮我调试这个 XSLT 吗?我不能为此花太多时间,因为我这周有很多事情要做,我已经尝试了至少半个小时,但仍然找不到它有什么问题。我在 XSLT 方面的技能是有限的,而且我们在课堂上被问得太多了,此外,Firefox 并没有提供太多帮助,除了抱怨尖锐的字符(á、é...)。

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

再次,谢谢!

4

1 回答 1

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>
于 2013-03-11T18:52:30.163 回答