/ / Skopiuj węzeł XML do innego węzła - php, xslt, xpath

Skopiuj węzeł XML do innego węzła - php, xslt, xpath

Jestem początkującym dla XML PHP i XPATH.

Mam plik XML w następujący sposób

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

Mogę usunąć węzeł tj. <section> lub Dodaj <section>. Z czym walczę, jest sposób na przeniesienie węzła i jego potomków do innej sekcji IE węzła. na przykład przenieś sekcję o ID = "30" i jej potomkami, aby powiedzieć sekcję o identyfikatorze = "33".

Każda pomoc będzie doceniona.

Odpowiedzi:

1 dla odpowiedzi № 1

XSLT służy do przekształcania dokumentów XML. Używa arkuszy stylów opisujących transformację z wejściowego dokumentu XML do dokumentu wyjściowego.

Na przykład. następująca transformacja

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

przekształci twój plik wejściowy w:

<?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 i XSLT wymagają trochę nauki, aby zacząć, ale gdy już je opanujesz, masz uniwersalne narzędzie do przekształcania dokumentów XML w dowolny sposób.

Ponadto, aby uruchomić XSLT w PHP (pamiętaj, aby włączyć rozszerzenie = php_xsl.dll lub rozszerzenie=php_xsl.so w pliku .ini) poniżej wyprowadzi łańcuchową wartość XML, którą można zrzucić do pliku lub wyświetlić na ekranie:

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