каков правильный синтаксис для структуры узла в xsl

я пытался запустить это преобразование xsl внутри моего php, xsl работает нормально, но не выводит значения для каждого раздела, я получаю все заголовки, но, похоже, я не могу получить его выведите что-нибудь еще здесь, как выглядит ответ curl XML:

<search>
<response status="2">
<errors>
 StartdateEarlierThanToday0Incorrect start date. Start date cannot be earlier than today.0FalseFalse
 </errors>
<number_of_hotels>1 of 1</number_of_hotels>
</response>
<lr_rates>
<hotel>
 <hotel_ref>142680</hotel_ref>
 <hotel_currency>GBP</hotel_currency>
 <hotel_rooms>
  <room>
  <ref>4380316</ref>
 <type>10</type>
 <type_description>Apartment</type_description>
 <sleeps>2</sleeps>
 <rooms_available>0</rooms_available>
 <adults>2</adults>
 <children>0</children>
 <breakfast>false</breakfast>
 <dinner>false</dinner>
 <description>
 The apartment has seperate kitchen area, lounge/dining area, bedroom with double bed and bathroom with bath & shower.
 </description>
 <alternate_description/>
 <rack_rate>140.00</rack_rate>
 <rate>
 <date>01/08/2012</date>
 <formatted_date>01 August 2012</formatted_date>
 <price>Full</price>
 <hotelcurrencyprice>Full</hotelcurrencyprice>
 <numeric_price>Full</numeric_price>
 <numeric_hotelcurrencyprice>Full</numeric_hotelcurrencyprice>
  <requested_currency>GBP</requested_currency>
  </rate>
    <rate>
   <date>02/08/2012</date>
   <formatted_date>02 August 2012</formatted_date>
    <price>Full</price>
    <hotelcurrencyprice>Full</hotelcurrencyprice>
    <numeric_price>Full</numeric_price>
     <numeric_hotelcurrencyprice>Full</numeric_hotelcurrencyprice>
     <requested_currency>GBP</requested_currency>
     </rate>
     <available_online>false</available_online>
    <minimum_nights>1</minimum_nights>
   <bed_type>Double</bed_type>
   <cancellation_policy/>
   <cancellation_days/>
   <cancellation_hours/>
   <room_terms/>
  </room>
 <room>...</room>
 </hotel_rooms>
 </hotel>
 </lr_rates>
 </search>

тогда это 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="/">
<h2>Availability Search:</h2>
<table border="1">
  <tr bgcolor="#FFFFFF">
    <th align="left">Room Type</th>
    <th align="left">Description</th>
    <th align="left">Availability</th>
    <th align="left">Price</th>
   </tr>
  <xsl:for-each select="/">
    <tr>
     <td><xsl:value-of select="type_description" /></td>
     <td><xsl:value-of select="description" /></td>
     <td><xsl:value-of select="rooms_available" /></td>
     <td><xsl:value-of select="rack_rate" /></td>
    </tr>
   </xsl:for-each>
 </table>
</xsl:template>
</xsl:stylesheet>

person dom    schedule 01.08.2012    source источник
comment
я пытался выложить выбор для каждого и значения для различной структуры узла, но все, что я, кажется, могу получить пустые данные таблицы   -  person dom    schedule 01.08.2012


Ответы (1)


Это ваша проблема:

<xsl:for-each select="/">
    <tr>
        <td>
            <xsl:value-of select="type_description" />
        </td>
        <td>
            <xsl:value-of select="description" />
        </td>
        <td>
            <xsl:value-of select="rooms_available" />
        </td>
        <td>
            <xsl:value-of select="rack_rate" />
        </td>
    </tr>
</xsl:for-each>

Это обрабатывает только один узел — узел документа /, и поскольку у него нет дочерних элементов с именами type_description, description, rooms_available или rack_rate — ничего не выводится.

Не имея времени присмотреться, вам, вероятно, понадобится что-то вроде:

<xsl:for-each select="/*/lr_rates/hotel/hotel_rooms/room">
    <tr>
        <td>
            <xsl:value-of select="type_description" />
        </td>
        <td>
            <xsl:value-of select="description" />
        </td>
        <td>
            <xsl:value-of select="rooms_available" />
        </td>
        <td>
            <xsl:value-of select="rack_rate" />
        </td>
    </tr>
</xsl:for-each>
person Dimitre Novatchev    schedule 01.08.2012
comment
спасибо за вашу помощь, но после того, как я попробовал это, он все еще дает мне вывод - person dom; 01.08.2012
comment
@DominicNoble: вам нужно изучить хотя бы основы XSLT и XPath - в вашем коде может быть множество проблем, которых у вас не будет после небольшого изучения XSLT/XPath. Вам нужно выполнить эту часть, прежде чем кто-либо сможет помочь вам с более глубокими и сложными проблемами. Например, предоставленный XML имеет неправильный формат — вам нужно заменить & на &amp;. - person Dimitre Novatchev; 01.08.2012
comment
я пробовал различные выражения xpath, я понимаю основы выражений xpath и xslt, но я, кажется, не могу заставить это работать, не могу понять, почему я проверил правильность кодировки, теперь мне интересно, может быть, мой скрипт curl отсекает заголовок xml - person dom; 01.08.2012
comment
@DominicNoble: Как я уже сказал, начните с XML - при условии, что это неправильно сформированный XML-документ, и любой совместимый синтаксический анализатор XML выдает ошибку, которую вы, вероятно, не уловили. - person Dimitre Novatchev; 01.08.2012
comment
к сожалению, это документ, сгенерированный запросом, я делаю запрос curl, который выводит xml, а затем пытается запустить его через этот файл xsl, но по какой-то причине xsl не выводит значения, кроме возможности неверных символов, которых я не вижу проблема со строкой xml, так как все это правильно отображается в моем интерфейсе, если я переношу строку туда, запрос все работает нормально, только не xsl foreach, он запускает все до туда - person dom; 01.08.2012
comment
странно, все работает, если я сохраняю запрос как xml и запускаю его в eclipse - person dom; 01.08.2012
comment
@DominicNoble: документ, который вы предоставляете в этом вопросе, определенно не имеет правильного формата - это не позволяет даже начать преобразование XSLT. - person Dimitre Novatchev; 01.08.2012
comment
извините, мне удалось это исправить, это было связано с попыткой использовать php dom вместо simpleXMLelement для работы с xml после завитка - person dom; 01.08.2012