2015-04-13 7 views
0

Как перейти от этого (с помощью PHP предпочтительно):Как преобразовать таблицу XML в HTML?

<bookstore> 
    <book category="cooking"> 
    <title lang="en">Everyday Italian</title> 
    <author>Giada De Laurentiis</author> 
    <year>2005</year> 
    <price>30.00</price> 
    </book> 
    <book category="web" cover="paperback"> 
    <title lang="en">Learning XML</title> 
    <author>Erik T. Ray</author> 
    <year>2003</year> 
    <price>39.95</price> 
    </book> 
</bookstore> 

К этому (пожалуйста, представьте себе, что это реальный HTML таблицу, я не разрешается размещать изображения пока):

|bookstore|book| title  |  author  |year|price| 
|   | |Everyday Italian|Giada De Laurentiis|2005|30.00| 
|   | |Learning XML |Erik T. Ray  |2003|39.95| 

Обратите внимание, что перечислены все узлы, но записываются только те значения, которые имеют значение. Это похоже на преобразование XML в полную «плоскую» таблицу, если вы понимаете, что я имею в виду.

+1

Вам нужно использовать что-то вроде SimpleXML, то понять его оттуда. – Frank

+0

Да, но как. Я использовал каждый XML-парсер PHP. Речь идет о логике создания такого рода таблиц. –

+0

ЕСЛИ доступные синтаксические анализаторы XML не делают то, что вы хотите, последнее средство - это объединение регулярных фильтров последовательно каждой строки вашего файла. –

ответ

1

Если вам не нужно манипулировать данными и просто нужно представить его, вы можете сделать XSLT

<?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> 
    <table> 
     <tr> 
     <th>Bookstore</th> 
     <th>Book</th> 
     <th>title</th> 
     <th>author</th> 
     <th>year</th> 
     <th>price</th> 
     </tr> 
     <xsl:for-each select="bookstore/book"> 
     <tr> 
     <td></td> 
     <td></td> 
     <td><xsl:value-of select="title"/></td> 
     <td><xsl:value-of select="author"/></td> 
     <td><xsl:value-of select="year"/></td> 
     <td><xsl:value-of select="price"/></td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

Вы можете использовать процессор XSLT PHP для создания HTML или просто ссылку на XSLT непосредственно в xml. Например, если вы связываете его следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="bookstore.xsl"?> 
<bookstore> 
    <book category="cooking"> 
    <title lang="en">Everyday Italian</title> 
    <author>Giada De Laurentiis</author> 
    <year>2005</year> 
    <price>30.00</price> 
    </book> 
    <book category="web" cover="paperback"> 
    <title lang="en">Learning XML</title> 
    <author>Erik T. Ray</author> 
    <year>2003</year> 
    <price>39.95</price> 
    </book> 
</bookstore> 

Это то, что будет оказана в веб-браузере:

<html> 
<body> 
    <table> 
     <tbody> 
      <tr> 
       <th>Bookstore</th> 
       <th>Book</th> 
       <th>title</th> 
       <th>author</th> 
       <th>year</th> 
       <th>price</th> 
      </tr> 
      <tr> 
       <td></td> 
       <td></td> 
       <td>Everyday Italian</td> 
       <td>Giada De Laurentiis</td> 
       <td>2005</td> 
       <td>30.00</td> 
      </tr> 
      <tr> 
       <td></td> 
       <td></td> 
       <td>Learning XML</td> 
       <td>Erik T. Ray</td> 
       <td>2003</td> 
       <td>39.95</td> 
      </tr> 
     </tbody> 
    </table> 
</body> 
</html> 
+0

Мне нужно ввести XML и сгенерировать таблицу. Я не могу жестко закодировать XML. –

+0

@AsfandyarHashmi это именно то, что делает XSLT! Он не заменяет ваш XML-документ, а преобразует его в другой вывод. Я добавил пример моего ответа. –

+0

Но я ничего не могу записать. Он должен быть общим. Например, вы использовали название, автор и т. Д. Я должен получить это из самого XML. –

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