Копировать атрибуты XML PHP - PullRequest
       13

Копировать атрибуты XML PHP

0 голосов
/ 22 декабря 2011

Мне нужно работать с документами 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://cf2.imgobject.com/t/p/w185/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)));
            }

Ответы [ 2 ]

3 голосов
/ 22 декабря 2011

Если вы хотите манипулировать документом 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://cf2.imgobject.com/t/p/w185/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://cf2.imgobject.com/t/p/w185/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>
0 голосов
/ 22 декабря 2011

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

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