Конечно, вы можете использовать XSLT, родной язык программирования реструктурировать XML документы в любом нюансов необходимо. В частности, здесь требуется вытягивание XML-контента из внешнего XML-файла источника. И PHP, как и другие языки общего назначения (Java, C#, Python, VB), поддерживает библиотеки для обработки XSLT.
XSLT(сохранить как .xsl или .xslt файл, который будет использоваться в PHP ниже, и убедитесь, что источник и назначения XML-файлы находятся в том же каталоге)
<?xml version="1.0" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*" />
<!-- Identity Transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="back">
<back>
<xsl:copy-of select="document('Source.xml')"/>
</back>
</xsl:template>
</xsl:transform>
PHP(загрузка XML и XSL файлы внешне, но могут быть встроены в виде строки)
$destinationdoc = new DOMDocument();
$doc1->load('Destination.xml');
$xsl = new DOMDocument;
$xsl->load('XSLTScript.xsl');
// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);
// Transform XML source
$newXml = $proc->transformToXML($doc1);
// Save output to file
$xmlfile = 'FinalOutput.xml';
file_put_contents($xmlfile, $newXml);
OUTPUT(используя выше размещенные Source и Destination XML)
<?xml version="1.0" encoding="UTF-8"?>
<root>
<base1>
<item1>FOO</item1>
<item2>BAR</item2>
<base2>
<back>
<root>
<element>
<back>
<item1>ABC</item1>
<item2>DEF</item2>
<more>
<moreitem>GHI</moreitem>
</more>
</back>
</element>
</root>
</back>
</base2>
</base1>
</root>
Я думаю, что решение находится в DOMXPath, но я cound't понимаю. –
Возможный дубликат http://stackoverflow.com/questions/2356144/php-duplicate-xml-node-using-simple-xml – Jan
Я уже видел это. Похоже, что способ импорта узла - это то, что мне нужно, но он не добавляет импортированный узел к определенному тегу существующего XML, если я хорошо понял. –