TCPDF未显示XSL元素值

时间:2014-05-22 10:49:11

标签: php xml xslt

xsl:value-of选择不显示pdf中的属性,但是如果将xsl显示为html,则会显示数据,但不显示在tcpdf PDF文档中。我正在使用DOM文档和PHP,XSL以及XML和TCPDF技术。

XML代码在这里:

<?xml version="1.0" encoding="UTF-8"?>
<catalogue>
    <category id="689" name="Cards" parentid="3"/>
    <category id="7" name="Toys" parentid="0"/>
    <category id="697" name="Boys Toys" parentid="7"/>
    <category id="698" name="Girls Toys" parentid="7"/>
    <category id="707" name="Play Toys" parentid="7"/>
    <category id="708" name="Rides" parentid="7"/>
    <category id="684" name="Swimming Accessories" parentid="7"/>
    <category id="719" name="" parentid="0"/>
    <category id="710" name="Cash" parentid="0"/>
    <category id="711" name="Airtime" parentid="0"/>
    <category id="716" name="Babies" parentid="0"/>
    <category id="701" name="Baby Shower" parentid="716"/>
    <category id="700" name="Infant" parentid="716"/>
    <category id="713" name="Kiddies Furniture" parentid="716"/>
    <category id="712" name="Protective Clothing (Baby Wear)" parentid="716"/>
    <category id="715" name="Educational" parentid="0"/>
    <category id="704" name="Educational Blocks" parentid="715"/>
    <category id="705" name="Educational Puzzles" parentid="715"/>
    <category id="695" name="Educational Toys" parentid="715"/>
    <category id="3" name="Gifts" parentid="0"/>
    <category id="693" name="Gift Bags" parentid="3"/>
    <category id="718" name="Party" parentid="0"/>
    <category id="696" name="Cake Decor" parentid="718"/>
    <category id="688" name="Craft Accessories" parentid="718"/>
    <category id="699" name="Decor" parentid="718"/>
    <category id="694" name="Flowers" parentid="718"/>
    <category id="686" name="Rentals" parentid="718"/>
    <category id="687" name="Party Accessories" parentid="718"/>
    <category id="687" name="Party Accessories" parentid="718"/>
    <category id="720" name="Services" parentid="718"/>
    <category id="686" name="Sweets" parentid="718"/>
    <category id="2" name="Wedding Accessories" parentid="718"/>
    <category id="717" name="Stationeries" parentid="0"/>
    <category id="720" name="Stationery Reading Blocks" parentid="714"/>
    <category id="4" name="Stationery" parentid="717"/>
    <category id="691" name="Stationery Papers" parentid="717"/>
</catalogue>

XSL代码在这里     

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="no" omit-xml-declaration="yes" doctype-public="-//W3C/DTD XHTML 1.0 Transitional//EN" doctype-system="
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" standalone="no" media-type="text/html" />

<xsl:template match="/">
<!--  <html>
  <body>-->
    <h2>Categories</h2>  
    <table border="1">
      <tr bgcolor="#9acd32">
    <th style="text-align:left; width: 210px">Category Name</th>
    <th style="text-align:left; width: 80px">ID</th>
    <th style="text-align:left; width: 80px">ParentID</th>   
      </tr>

      <xsl:for-each select="catalogue/category">
      <tr >
        <td><xsl:value-of select="@name"/></td>
        <td><xsl:value-of select="@id"/></td>
        <td><xsl:value-of select="@parentid"/></td>
      </tr>
    </xsl:for-each>

      </table>

  <!--</body>
  </html>-->
    </xsl:template> 
</xsl:stylesheet>

PHP代码在这里:

<?php
    $xsl=0;
    $xmldata = new DOMDocument( "1.0", "UTF-8");
    $xml_file = "test005.xml";
    $xmldata->load($xml_file);

    $xslDoc = new DOMDocument("1.0", "UTF-8");
    $xslt_file = "catalogue2.xsl";
    $xslDoc->load($xslt_file);

    print_r(xml2html($xmldata, $xslDoc));
function xml2html($xmldata, $xsl)
{
    /* $xmldata -> your XML */
    /* $xsl -> XSLT file */

    $path = 'include';
    $arguments = array('/_xml' => $xmldata);

    $xsltproc = new XSLTProcessor();
    $xsltproc->importStyleSheet($xsl);
    $html = $xsltproc->transformToXML($xmldata);

    if (empty($html)) {
       die('XSLT processing error: ');//. XSLTxslt_error($xsltproc));
    }

    return $html;
}

?>

1 个答案:

答案 0 :(得分:1)

这听起来类似于我在TCPDF中没有完全显示我已经传入的XML的问题。

在我的例子中,似乎从transformToXML返回的XML包含一个自闭合标记形式的空单元格,即。 <td />而不是<td></td>。当通过浏览器将其视为网页时,这会呈现正常,但TCPDF不喜欢它,并且生成的PDF在此之后是空白的。

如果你看到同样的问题,基于你的XML和XSL,类别ID 719的空白'name'属性似乎是最明显的罪魁祸首。

尝试在<xsl:for-each>循环的表格单元格中添加空格,以查看是否会导致PDF格式正确生成;就我而言,确实如此。