XSLT处理器transformToXML没有样式信息

时间:2015-01-05 15:16:56

标签: php xml xslt

我正在尝试使用PHP(版本5.5.19)中的XstlProcessor类来执行xls转换。如果我执行脚本并打印结果,则只打印没有转换的旧xml文件,并显示"此XML文件似乎没有与之关联的任何样式信息。"。

应该执行转换的脚本的一部分:

$xml = new DomDocument;
$xml->load("tmp.xml");
$xsl = new DomDocument;
$xsl->load("bookings.xsl");

$proc = new XsltProcessor;
$proc->importStyleSheet($xsl);

$html = $proc->transformToXML($xml);
if(!$html) die('XLST processing error\n');
echo $html;

XSL文件

<?xml version="1.0" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <h2>Booking Overview</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Date</th>
        <th>Name</th>
        <th>Surname</th>
        <th>Street</th>
        <th>City</th>
        <th>Country</th>
        <th>Brand</th>
        <th>Model</th>
      </tr>
      <xsl:for-each select="bookings/booking">
        <tr>
          <td><xsl:value-of select="@bdate" /></td>
          <td><xsl:value-of select="customer/name"/></td>
          <td><xsl:value-of select="customer/surname"/></td>
          <td><xsl:value-of select="address/street"/></td>
          <td><xsl:value-of select="address/city"/></td>
          <td><xsl:value-of select="address/country"/></td>
          <td><xsl:value-of select="vehicle/brand"/></td>
          <td><xsl:value-of select="vehicle/model"/></td>
        </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

XML文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- all bookings-->
<bookings>
<!--booking-->
<booking bdate ="2015-01-14">
    <customer>
        <name>Josef</name>
        <surname>Mongo</surname>
    </customer>
    <address>
        <street>Alberstrasse</street>
        <city>Graz</city>
        <country>Austria</country>
    </address>
    <vehicle>
        <brand>Audi</brand>
        <model>R8</model>
    </vehicle>
</booking>
<!--booking-->
<booking bdate ="2014-07-23">
    <customer>
        <name>Hannelore</name>
        <surname>Metutschnik</surname>
    </customer>
    <address>
        <street>Moserhofgasse</street>
        <city>Graz</city>
        <country>Austria</country>
    </address>
    <vehicle>
        <brand>Fiat</brand>
        <model>Punto</model>
    </vehicle>
</booking>
<!--booking-->
<booking bdate ="2014-11-20">
    <customer>
        <name>Josef</name>
        <surname>Mongo</surname>
    </customer>
    <address>
        <street>Alberstrasse</street>
        <city>Graz</city>
        <country>Austria</country>
    </address>
    <vehicle>
        <brand>BMW</brand>
        <model>M6</model>
    </vehicle>
</booking>
<!--booking-->
<booking bdate ="2014-11-23">
    <customer>
        <name>Onder</name>
        <surname>Graf</surname>
    </customer>
    <address>
        <street>Mariahilferstrasse</street>
        <city>Wien</city>
        <country>Austria</country>
    </address>
    <vehicle>
        <brand>BMW</brand>
        <model>M6</model>
    </vehicle>
</booking>
<!--booking-->
<booking bdate ="2014-11-23">
    <customer>
        <name>Onder</name>
        <surname>Graf</surname>
    </customer>
    <address>
        <street>Mariahilferstrasse</street>
        <city>Wien</city>
        <country>Austria</country>
    </address>
    <vehicle>
        <brand>BMW</brand>
        <model>M6</model>
    </vehicle>
</booking>
</bookings>

1 个答案:

答案 0 :(得分:0)

您的输入XML格式正确且XSLT代码正确无误。我无法在PHP 5.4.30下重现您的问题。

我怀疑您是将结果保存在扩展名为*.xml而不是*.html的文件中。如果使用浏览器打开,它将报告没有样式表与此XML文件关联。因此,解决方案是:更改文件扩展名。