Простой пример использования XSLT — переименование XML-тегов

Рассмотрим простой пример использования 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-данных могут оказаться следующие ссылки:


Добавление комментария:

 css.php