2016-08-04 3 views
0

Я новичок в XML PHP и XPATH.Скопируйте узел xml на другой узел

У меня есть файл XML следующим образом

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

Я могу удалить узел т.е.. <section> или добавить <section>. То, с чем я борюсь, - это способ перемещения узла и его дочерних элементов в раздел IE другого узла. , например, переместите раздел с идентификатором = «30» и его дочерние части, чтобы сказать раздел с идентификатором «33».

Любая помощь будет оценена по достоинству.

+0

Здесь вы ищете XSLT. – Markus

+0

О, боже, ничего просто! –

+0

Любой желающий дать мне краткое представление о том, как это сделать с XLST –

ответ

1

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; 
+0

Хороший ответ. Я отредактировал, чтобы добавить PHP-код для OP для реализации XSLT. Кроме того, двойные косые черты, кроме последнего, являются избыточными, и я добавил вывод и разделил теги в xslt. Отредактируйте при необходимости! – Parfait

+0

Спасибо, я дам эту попытку. Большое спасибо, –

+0

Ничего себе, что работает. Огромное спасибо!!!!! –

Смежные вопросы