Рассмотрим простой пример использования XSLT — переименование XML-тегов:
Пусть дано описание определенной таблицы в xml-виде:
long_row_name при этом имеет длину имени превышающее максимально разрешенное значение, например для MySQL это 64 символа, для Oracle – 30 символов. Таким образом если нам на вход, например, с внешней системы поступают данные в xml не соответствующие этим стандартом длину названия полей надо обрезать, при этом оставить все подходящие теги.
Для реализации данной задачи будем использовать следующий php-скрипт:
<?php $xmldoc = new DOMDocument(); $xmlfile = $xmldoc->load("data.xml"); // загружаем наши данные в xml $xsldoc = new DOMDocument(); $xsldoc->load('rename.xsl'); // загружаем правила трансформации $proc = new XSLTProcessor(); $proc->importStylesheet($xsldoc); $str = $proc->transformToXML($xmldoc); // производим преобразование данных echo $str; // смотрим что получилось в браузере $fp = fopen('newdata.xml',"w+"); // создаем newdata.xml для записи в него результатов fwrite($fp,$str); fclose($fp); ?> |
Для того чтобы xls-модуль заработал в PHP-интерпретаторе необходимо раскомментировать его загрузку в php.ini:
extension=php_xsl.dll |
Содержимое файла rename.xsl:
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- Эта часть xslt-кода скопирует все теги с их содержимым не подходящие под нижеописанные шаблоны, например short_row --> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="long_row_name1"> <long_row1> <!-- новое название поля таблицы --> <xsl:value-of select="."/> </long_row1> </xsl:template> <xsl:template match="long_row_name2"> <long_row2> <xsl:value-of select="."/> <!-- оставляем содержимое ноды --> </long_row2> </xsl:template> </xsl:stylesheet> |
После запуска скрипта, результирующий xml-файл newdata.xml будет иметь следующее содержание:
<table_name> <long_row1> 1 </long_row1> <long_row2> 2 </long_row2> <short_row> 3 </short_row> ... </table_name> |
Полезными в вопросах XSLT-преобразований XML-данных могут оказаться следующие ссылки: