【发布时间】:2014-04-26 16:00:21
【问题描述】:
我在这里和大G上搜索,我愿意学习,但我还没有找到答案。
我正在尝试使用 XSLT 转换外部 XML 数据,以便在 HTML 或 PHP 中轻松读取。我测试了一些东西,并成功地使用 XSL 和 PHP 转换了一些简单的 XML 文件。问题是我实际需要使用的XML文件并不是我们通常看到的典型的点xml文件,而更像是“http://webservices.nextbus.com/service/publicXMLFeed?command=vehicleLocations&a=sf-muni&r=14&t=0”的格式。当我使用这些地址时,它似乎可以正确读取这些文件和 XSL 样式表,解析正确数量的表格单元格,但将它们返回为空。
怎么了?
还有,会不会和外站使用的xml格式有关?我注意到他们的 XML 更像是“XHTML 风格”,而不是我过去看到的其他文件。
他们的风格使用一个大标签并以斜线结尾:
<vehicle id="5464" routeTag="14" dirTag="14_IB2" lat="37.7637" lon="-122.4087" secsSinceReport="86" predictable="true" heading="218" speedKmHr="0"/>
同样的例子,如果它是使用 usua 树写的:
<vehicle> <id>5464</id> <routeTag>14</routeTag> <dirTag>14_IB2</dirTag> ... </vehicle>
route14.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Route 14</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Vehicle</th>
<th style="text-align:left">Direction</th>
</tr>
<xsl:for-each select="body/vehicle">
<tr>
<td><xsl:value-of select="id" /></td>
<td><xsl:value-of select="dirTag" /></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
PHP 代码:
<?php
// Load XML file
$xml = new DOMDocument;
$xml->load('http://webservices.nextbus.com/service/publicXMLFeed?command=vehicleLocations&a=sf-muni&r=14&t=0');
// Load XSL file
$xsl = new DOMDocument;
$xsl->load('route14.xsl');
// Configure the transformer
$proc = new XSLTProcessor;
// Attach the xsl rules
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($xml);
?>
【问题讨论】: