我正在尝试使用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>
答案 0 :(得分:0)
您的输入XML格式正确且XSLT代码正确无误。我无法在PHP 5.4.30下重现您的问题。
我怀疑您是将结果保存在扩展名为*.xml
而不是*.html
的文件中。如果使用浏览器打开,它将报告没有样式表与此XML文件关联。因此,解决方案是:更改文件扩展名。