пятница, 6 апреля 2018 г.

PHP. Парсинг XML-файла. SAX

Допустим, у нас есть xml-файл, который мы хотим вывести в виде таблицы книг на странице.

catalog.xml
<?xml version="1.0" encoding="utf-8" ?>
<catalog>

  <book>
    <author>Алекс Гомер</author>
    <title>XML и IE5</title>
    <pubyear>2000</pubyear>
    <price>200</price>
  </book>

  <book>
    <author>Алекс Хоумер</author>
    <title>Dimanic HTML</title>
    <pubyear>2004</pubyear>
    <price>120</price>
  </book>

  <book>
    <author>Алексей Валиков</author>
    <title>Технология XSLT</title>
    <pubyear>2006</pubyear>
    <price>150</price>
  </book>

  <book>
    <author>Стивен Холзнер</author>
    <title>XSLT</title>
    <pubyear>2005</pubyear>
    <price>170</price>
  </book>

  <book>
    <author>Михаил Масленников</author>
    <title>Практическая криптография</title>
    <pubyear>2009</pubyear>
    <price>200</price>
  </book>

  <book>
    <author>Джерри Хонейкатт</author>
    <title>Реест Windows XP</title>
    <pubyear>2007</pubyear>
    <price>250</price>
  </book>

  <book>
    <author>Уолтер Брюс</author>
    <title>Windows XP. Средства повышения производительности</title>
    <pubyear>2008</pubyear>
    <price>250</price>
  </book>

  <book>
    <author>Андрей Попов</author>
    <title>Windows Script Host для Windows 2000/XP</title>
    <pubyear>2002</pubyear>
    <price>220</price>
  </book>

  <book>
    <author>Джон Уокенбах</author>
    <title>Excel 2002. Библия пользователя</title>
    <pubyear>2003</pubyear>
    <price>260</price>
  </book>

  <book>
    <author>Сандра Э. Эдди</author>
    <title>XML. Справочник</title>
    <pubyear>2004</pubyear>
    <price>100</price>
  </book>

  <book>
    <author>Майкл Ховард</author>
    <title>Разработка защищенных Web-приложений на платформе Windows 2000</title>
    <pubyear>2006</pubyear>
    <price>250</price>
  </book>

  <book>
    <author>Михаэль Зеебергер-Вайхсельбаум</author>
    <title>WAP-программирование на языке WML</title>
    <pubyear>2005</pubyear>
    <price>150</price>
  </book>

</catalog>

sax.php
<?php
  header( "Content-Type: text/html;charset=utf-8"); 
  // Создание парсера xml-файла
  $sax = xml_parser_create("utf-8");
  
  // Функция обработчик начальных тегов (открывающих тегов)
  function onStart($parser, $tag, $attributes){
if($tag != "CATALOG" and $tag != "BOOK") 
echo "<td>";
if($tag == "BOOK") 
echo "<tr>";
  }
  
  // Функция обработчик закрывающих тегов 
  function onEnd($parser, $tag){   
if($tag != "CATALOG" and $tag != "BOOK") 
echo "</td>";
if($tag == "BOOK") 
echo "</tr>";  
  }
  
  // Функция обработчик текстового содержимого 
  function onText($parser, $text){
echo $text;  
  }
  
  // Назначение обработчиков начальных и конечных тегов 
  xml_set_element_handler($sax, "onStart", "onEnd");
  
  // Назначение обработчика текстового содержимого 
  xml_set_character_data_handler($sax, "onText");
?>
<html>

<head>
  <title>Каталог</title>
</head>

<body>
  <h1>Каталог книг</h1>
  <table border="1" width="100%">
    <tr>
      <th>Автор</th>
      <th>Название</th>
      <th>Год издания</th>
      <th>Цена, руб</th>
    </tr>
    <?php
      //Парсинг. Запустим парсер.
  xml_parse($sax, file_get_contents("catalog.xml"));
    ?>
  </table>
</body>

</html>


По материалам "Специалиста".

Комментариев нет:

Отправить комментарий

Materialize-css. Футер

Сделаем футер и прижмем к низу страницы. Документация: https://materializecss.com/footer.html