Использование внешнего XML-uri с переменными

Я искал здесь и на большом G, я готов учиться, но пока не нашел ответа.

Я пытаюсь преобразовать внешние XML-данные с XSLT, чтобы их можно было легко читать в HTML или PHP. Я проверил несколько вещей, и я успешно преобразовал некоторые простые XML-файлы с XSL и PHP. Проблема в том, что фактические файлы XML, которые мне нужно использовать, на самом деле не являются типичными файлами dot 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); ?> 

    вы находитесь на правильном пути, но при доступе к значениям атрибутов вы должны префикс их с помощью @

    изменить эти строки

     <tr> <td><xsl:value-of select="id" /></td> <td><xsl:value-of select="dirTag" /></td> </tr> 

    в

     <tr> <td><xsl:value-of select="@id" /></td> <td><xsl:value-of select="@dirTag" /></td> </tr> 

    Ваш код в порядке, но чтобы получить значения атрибута, вам нужно префикс ваших выбранных имен атрибутов с помощью @ в вашем маршруте14.xsl

     <td><xsl:value-of select="@id" /></td> <td><xsl:value-of select="@dirTag" /></td>