Скопировать XML-атрибуты PHP

Мне нужно работать с документами XML, и мне нужно скопировать некоторые поля в другой файл XML. У меня есть это поле:

<cast> <person name="Nanda Anand" character="" job="Director" id="589088" thumb="" department="Directing" url="http://www.themoviedb.org/person/589088" order="0" cast_id="1000"/> <person name="Lynn Collins" character="" job="Actor" id="21044" thumb="http://img.ruphp.com/php/berS11tKvXqTFThUWAYrH279cvn.jpg" department="Actors" url="http://www.themoviedb.org/person/21044" order="0" cast_id="1001"/> </cast> 

Мне нужно скопировать все элементы в другой XML, но с данными атрибутов. Я использую этот код, но он не работает:

 foreach ($movies->movies->movie->cast->children() as $person) { $person = $cast->appendChild( $xmldoc->createElement(("person"), str_replace("&", "&amp;",$person))); } 

Если вы хотите манипулировать XML-документом (например, добавлять узлы из одного документа в другой), вы должны использовать DOMDocument, а не SimpleXML.

Вот код для копирования из одного документа в другой с помощью DOMDocument. Обратите внимание, что это двухэтапный процесс. Сначала импортируйте узел в документ как $ ndTemp. Во-вторых, добавьте импортированный $ ndTemp к указанному родительскому объекту (я просто использую корневой элемент documentElement, но это может быть другой узел).

ПРИМЕЧАНИЕ. Если вы просто делаете простую копию, вы можете рассмотреть возможность использования XSL, но это еще одно сообщение …

Входной XML (movie.xml)

 <xml> <movie name='first'> <cast> <person name="Nanda Anand" character="" job="Director" id="589088" thumb="" department="Directing" url="http://www.themoviedb.org/person/589088" order="0" cast_id="1000"/> <person name="Lynn Collins" character="" job="Actor" id="21044" thumb="http://img.ruphp.com/php/berS11tKvXqTFThUWAYrH279cvn.jpg" department="Actors" url="http://www.themoviedb.org/person/21044" order="0" cast_id="1001"/> </cast> </movie> <movie name='Second'> <cast> <person name="Zaphod Beeblebrox" character="" job="Director" id="589088" thumb="" department="Directing" url="http://www.themoviedb.org/person/589088" order="0" cast_id="1000"/> </cast> </movie> </xml> 

PHP

 <?php $xml = new DOMDocument(); $strFileName = "movie.xml"; $xml->load($strFileName); $xmlCopy = new DOMDocument(); $xmlCopy->loadXML( "<xml/>" ); $xpath = new domxpath( $xml ); $strXPath = "/xml/movie/cast/person"; $elements = $xpath->query( $strXPath, $xml ); foreach( $elements as $element ) { $ndTemp = $xmlCopy->importNode( $element, true ); $xmlCopy->documentElement->appendChild( $ndTemp ); } echo $xmlCopy->saveXML(); ?> 

Вывод

 <?xml version="1.0"?> <xml> <person name="Nanda Anand" character="" job="Director" id="589088" thumb="" department="Directing" url="http://www.themoviedb.org/person/589088" order="0" cast_id="1000" /> <person name="Lynn Collins" character="" job="Actor" id="21044" thumb="http://img.ruphp.com/php/berS11tKvXqTFThUWAYrH279cvn.jpg" department="Actors" url="http://www.themoviedb.org/person/21044" order="0" cast_id="1001" /> <person name="Zaphod Beeblebrox" character="" job="Director" id="589088" thumb="" department="Directing" url="http://www.themoviedb.org/person/589088" order="0" cast_id="1000" /> </xml> 

Я думаю, что это сработает, но не проверено

 foreach ($movies->movies->movie->cast->children() as $person) { $cast->appendChild($person); } из foreach ($movies->movies->movie->cast->children() as $person) { $cast->appendChild($person); }