2015-12-21 3 views
0

У меня есть XML такого кода:Как получить данные в XSL файл

<hotels> 
    <hotel contact="(855) 23 430 732"> 
     <name>hotel A</name> 
     <type>hotel or apartment</type> 
     <rating>1 to 5</rating> 
     <address> 
      <houseNo>73 </houseNo> 
      <street>Preah Monivong Blvd </street> 
      <Sangkat>Mean Chey</Sangkat > 
      <Khan>Daun Penh</Khan> 
      <city>Bangkok</city> 
     </address> 
     <room> 
      <roomType>hotel: standard/deluxe, apartment: studio/2-bedroom/3-bedroom</roomType> 
      <price>209</price> 
      <description>Descriptions</description> 
     </room> 
     <room> 
      <roomType>hotel: standard/deluxe, apartment: studio/2-bedroom/3-bedroom</roomType> 
      <price>210</price> 
      <description>Descriptions</description> 
     </room> 
     <room> 
      ..... 
     </room> 
    </hotel> 
    <hotel contact="..."> 
     ... ... 
     ... ... 
    </hotel> 
</hotels> 

Использование 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>test xsl</h2> 
    <table border="1"> 
     <tr bgcolor="#9acd32"> 
      <th style="text-align:left;">Name</th> 
      <th style="text-align:left;">Type</th> 
      <th style="text-align:left;">Rating</th> 
      <th style="text-align:left;">Address</th> 
      <th style="text-align:left;">Room</th> 
     </tr> 
     <xsl:for-each select="hotels/hotel"> 
     <tr> 
     <!--<xsl:value-of select="."/>--> 
      <td><xsl:value-of select="name" /></td> 
      <td><xsl:value-of select="type" /></td> 
      <td><xsl:value-of select="rating" /></td> 
      <td><xsl:value-of select="address" /></td> 
      <td><xsl:value-of select="room" /></td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </body> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 

проблема Моего код ничего не ошибки, но для <room> может загрузить только первый ребенок. Любой из них имеет опыт работы с xsl пожалуйста, помогите мне решить

** Я хочу результат, как this **

+0

Пожалуйста, пост полной таблицы стилей ** и ** ожидаемый результат. - ** Подсказка **: вам нужно использовать другие 'xsl: for-each' или' xsl: apply-templates' для обработки комнат. –

+0

Пожалуйста, проверьте его снова, я готов к редактированию – Songs

+0

Я до сих пор не вижу ожидаемого результата. Вы создаете строку для каждого отеля: как вы ожидаете показать несколько комнат в одном ряду? –

ответ

1

Изменить это:

<td><xsl:value-of select="room" /></td> 

к:

<td> 
    <xsl:for-each select="room"> 
     <xsl:text>- </xsl:text> 
     <xsl:value-of select="roomType" /> 
     <xsl:text> Price: </xsl:text> 
     <xsl:value-of select="price" /> 
     <xsl:text> Description: </xsl:text> 
     <xsl:value-of select="description" /> 
     <br/> 
    </xsl:for-each> 
</td> 

Лично я бы предпочел сделать что-то вроде:

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/hotels"> 
    <html> 
     <body> 
      <h2>test xsl</h2> 
      <table border="1"> 
       <tr bgcolor="#9acd32"> 
        <th>Name</th> 
        <th>Type</th> 
        <th>Rating</th> 
        <th>Address</th> 
        <th>Room Type</th> 
        <th>Room Price</th> 
        <th>Description</th> 
       </tr> 
       <xsl:apply-templates select="hotel"/> 
      </table> 
     </body> 
    </html> 
</xsl:template> 

<xsl:template match="hotel"> 
    <xsl:variable name="rowspan" select="count(room) + 1" /> 
    <tr> 
     <td rowspan="{$rowspan}"><xsl:value-of select="name"/></td> 
     <td rowspan="{$rowspan}"><xsl:value-of select="type"/></td> 
     <td rowspan="{$rowspan}"><xsl:value-of select="rating"/></td> 
     <td rowspan="{$rowspan}"><xsl:value-of select="address"/></td> 
    </tr> 
    <xsl:apply-templates select="room"/> 
</xsl:template> 

<xsl:template match="room"> 
    <tr> 
     <td><xsl:value-of select="roomType"/></td> 
     <td><xsl:value-of select="price"/></td> 
     <td><xsl:value-of select="description"/></td> 
    </tr> 
</xsl:template> 

</xsl:stylesheet> 

получить:

enter image description here

+0

Все сработало, спасибо. – Songs

+0

Мог ли я знать, как 'var_dump' как' PHP' в '' или нет для данных, которые мы загружаем. Я действительно не знаю, как его отладить. – Songs

+0

@ Сонги Я не понимаю, что вы просите. Кажется, это не связано с этим вопросом или с XSLT в целом. Предлагаю вам задать новый вопрос. –

Смежные вопросы