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 № 1XSLT 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;