суббота, 7 апреля 2018 г.

PHP. Преобразование XML c XSL/T

Extensible Stylesheet Language /Transformations.
Стилевая технология, предназначенная для трансформации XML-документов в другие форматы.
Таблицы стилей XSL создаются по правилам XML-документов
Таблицы стилей XSL состоят из набора шаблонов.


// Загрузка исходного XML-документа
$xml = new DomDocument();
$xml->load("catalog.xml");
// Загрузка таблицы стилей XSL
$xsl = new DomDocument();
$xsl->load("catalog.xsl");
// Создание XSLT процессора
$processor = new XSLTProcessor();
// Загрузка XSL в процессор
$processor->importStylesheet($xsl);
// Выполнение преобразования
echo $processor->transformToXML($xml);

ПРИМЕР.
catalog.xml
<?xml version="1.0" encoding="utf-8"?>

<catalog>

  <book>
    <author>Алекс Гомер</author>
    <title>XML и IE11</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>

catalog.xsl
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output
              method="html"
              doctype-public="-//W3C//DTD HTML 4.01//EN"
              doctype-system="http://www.w3.org/TR/html4/strict.dtd"
              indent="yes" />

  <!--
Шаблон корневого элемента
-->
  <xsl:template match="/">
    <html>

    <head>
      <title>Наши книги</title>
      <style type="text/css">
        * {
          margin: 0px;
          padding: 0px
        }
       
        h1 {
          padding: 10px;
          text-align: center;
          background-color: #ccf
        }
       
        table {
          margin: 10px;
          border-collapse: collapse
        }
       
        td {
          border: 1px solid gray;
          padding: 5px
        }
       
        thead td {
          text-align: center;
          background-color: #ccf;
          font-weight: bold
        }
       
        #colTitle {
          width: 300px
        }
       
        #colAutor {
          width: 300px
        }
       
        #colPubYear {
          width: 100px
        }
       
        #colPrice {
          width: 100px
        }
       
        .expenceBook td {
          background-color: yellow
        }
      </style>
    </head>

    <body>
      <h1>Наши книги</h1>
      <table>
        <thead>
          <td id="colTitle">Наименование</td>
          <td id="colAutor">Автор</td>
          <td id="colPubYear">Год издания</td>
          <td id="colPrice">Цена</td>
        </thead>
        <tbody>
          <xsl:apply-templates select="/catalog/book" />
        </tbody>
      </table>
    </body>

    </html>
  </xsl:template>
  <!--
Шаблон отрисовки книги стоимостью менее 200 руб.
-->
  <xsl:template match="book[price &lt; 200]">
    <tr>
      <xsl:apply-templates select="./*" />
    </tr>
  </xsl:template>
  <!--
Шаблон отрисовки книги стоимостью более 200 руб.
-->
  <xsl:template match="book[price &gt; 200]">
    <tr class="expenceBook">
      <xsl:apply-templates select="./*" />
    </tr>
  </xsl:template>
  <!--
Шаблон отрисовки дочерних элементов книги
-->
  <xsl:template match="book/*">
    <td>
      <xsl:value-of select="." />
    </td>
  </xsl:template>
</xsl:stylesheet>

Объединим два файла.
xslt.php
<?php
// Создание объекта XML
$xml = new DomDocument();

// Загрузка XML документа
$xml->load("catalog.xml");

// Создание объекта XSL
$xsl = new DomDocument();

// Загрузка XSL документа
$xsl->load("catalog.xsl");

// Создание XSLT парсера
$processor = new XSLTProcessor();

// Загрузка XSL объекта
$processor->importStylesheet($xsl);

// Преобразование
echo $processor->transformToXML($xml);
?>

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

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

Materialize-css. Футер

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