/ / Copier un noeud XML sur un autre noeud - php, xslt, xpath

Copier un noeud XML sur un autre noeud - php, xslt, xpath

Je suis un débutant en XML PHP et XPATH.

J'ai un fichier XML comme suit

<?xml version="1.0" encoding="utf-8"?>
<sections>
<section name="Windows 7" id="7">
<section name="Registry" id="29">
<section name="hkcu" id="30">
<section name="software" id="31">
</section>
</section>
</section>
</section>
<section name="Server 2012" id="33">
</section>
</sections>

Je peux supprimer un nœud à savoir. <section> ou ajouter un <section>. Ce qui me pose problème, c’est qu’il existe un moyen de déplacer un nœud et ses enfants vers une autre section IE de nœud. Par exemple, déplacez la section avec ID = "30" et ses enfants pour dire la section avec ID = "33".

Toute aide serait appréciée.

Réponses:

1 pour la réponse № 1

XSLT est conçu pour transformer des documents XML. Il utilise des feuilles de style décrivant la transformation d'un document XML d'entrée en un document de sortie.

Par exemple. la transformation suivante

<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>

va transformer votre fichier d'entrée en ceci:

<?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 et XSLT nécessitent un peu d’apprentissage, mais une fois que vous les maîtrisez, vous disposez d’un outil universel pour transformer les documents XML à votre guise.

Aussi, pour courir XSLT en PHP (assurez-vous d'activer extension = php_xsl.dll ou extension = php_xsl.so dans le fichier .ini) ci-dessous générera une valeur XML de chaîne pouvant être importée dans un fichier ou renvoyée à l'écran:

// 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;