XSLT предназначен для преобразования документов XML. Он использует таблицы стилей, описывающие преобразование из входного документа XML в выходной документ.
E.g. следующее преобразование
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output version="1.0" encoding="UTF-8" method="xml" indent="yes" />
<xsl:strip-space elements="*"/>
<!-- identity transformation -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<!-- remove section with id 30 -->
<xsl:template match="section[@id='30']"/>
<!-- copy section with id 33 and add (as a child) section with id 30 -->
<xsl:template match="section[@id='33']">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
<xsl:copy-of select="//section[@id='30']"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
превратит ваш входной файл в этом:
<?xml version="1.0"?>
<sections>
<section name="Windows 7" id="7">
<section name="Registry" id="29">
</section>
</section>
<section name="Server 2012" id="33">
<section name="hkcu" id="30">
<section name="software" id="31">
</section>
</section>
</section>
</sections>
XPath и XSLT занять немного обучения, чтобы начать работу, но как только вы освоили его, у Вас есть универсальный инструмент для преобразования документов XML любым способом.
Кроме того, для запуска XSLT в PHP (не забудьте включить расширения = php_xsl.dll или расширения = php_xsl.so в файле .ini) ниже выхода будет значение XML-строки, которая может быть сброшена в файл или эхо на экран:
// LOAD XML AND XSL FILES
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->load('Input.xml');
$xslfile = new DOMDocument('1.0', 'UTF-8');
$xslfile->load('XSLTSCript.xsl');
// TRANSFORM XML with XSLT
$proc = new XSLTProcessor;
$proc->importStyleSheet($xslfile);
$newXML = $proc->transformToXML($xml);
# ECHO OUTPUT STRING
echo $newXML;
Здесь вы ищете XSLT. – Markus
О, боже, ничего просто! –
Любой желающий дать мне краткое представление о том, как это сделать с XLST –