2015-12-18 7 views
0

В настоящее время я использую приведенный ниже PHP-код для получения «пути к изображениям», затем я прохожу через XML, чтобы удалить узел, который имеет этот путь.Скопируйте узел XML в другой файл

<?php  
$id = $_GET['imagepath'];  
$xmldoc = new DOMDocument(); 
$xmldoc->load('newcoke.xml'); 
$root = $xmldoc->documentElement; 
$fnode = $root->firstChild; 

$items = $xmldoc->getElementsByTagName('flight'); 
foreach ($items as $item){ 
    $node = $item->getElementsByTagName('imagepath')->item(0); 
    if ($node->nodeValue == $id){ 
     $node->parentNode->parentNode->removeChild($node->parentNode);    
    } 
} 
$xmldoc->save('newXmlFile.xml'); 
?> 

Я пытался в течение нескольких часов, чтобы потом как-то скопировать удаленный узел и сохранить его в новый файл XML с той же структурой, которая существует под названием «удалено». Может ли кто-нибудь помочь?

Это структура XML:

<ArrivingFlights> 
    <flight> 
     <to>Ger</to> 
     <from>Mammy xx</from> 
     <imagepath>0002.jpg</imagepath> 
     <templateStyle>template1</templateStyle> 
     <time>08:00</time> 
     <date>21/12/15</date> 
    </flight> 
    <flight> 
     <to>Ciara</to> 
     <from>Vikki xx</from> 
     <imagepath>0003.jpg</imagepath> 
     <templateStyle>template1</templateStyle> 
     <time>11:00</time> 
     <date>17/12/15</date> 
    </flight> 
</ArrivingFlights> 
+0

вы можете показать нам образец xml – Afsar

+0

@zan Ive сделал редактирование. спасибо –

+0

Можете ли вы также привести пример этой «той же структуры, которая существует, называется« удалена », чтобы мы могли видеть, какую часть структуры вы хотите скопировать? – VolkerK

ответ

0

DOMNode::removeChild возвращает узел он просто удален; этот объект все еще действителен ... для DOM istance он был удален из.
Чтобы использовать его в другом DOM, вы должны указать import, перед добавлением его к некоторому элементу/узлу в этом другом экземпляре DOM.

if ($node->nodeValue == $id){ 
    $rn = $node->parentNode->parentNode->removeChild($node->parentNode); 
    $deletedFlight = $otherDom->importNode($rn, true); // make a deep-copy for the other DOM 
    $otherDom->documentElement->appendChild($deletedFlight); 
} 

... или вы можете передать $ рн в DOMDocument::saveXML() и добавить возвращаемое значение в файл с помощью file_put_contents(..,.., FILE_APPEND). Полученный файл будет выглядеть

<flight> 
    <to>Ger</to> 
    <from>Mammy xx</from> 
    <imagepath>0002.jpg</imagepath> 
    <templateStyle>template1</templateStyle> 
    <time>08:00</time> 
    <date>21/12/15</date> 
</flight> 
<flight> 
    <to>Ciara</to> 
    <from>Vikki xx</from> 
    <imagepath>0003.jpg</imagepath> 
    <templateStyle>template1</templateStyle> 
    <time>11:00</time> 
    <date>17/12/15</date> 
</flight> 

, который не является действительным XML (элемент более одного верхнего уровня) ... но ... Вы можете импортировать этот файл в качестве юридического лица в действительный документ XML.
Таким образом (будучи немного осторожным) вы можете избавиться от второго DOM и времени и памяти, необходимых для его создания.

+0

Im получение этих ошибок Предупреждение: DOMDocument :: load(): Документ пуст в файле:/C: /xampp/htdocs/coke/deleted.xml, строка: 1 в C: \ xampp \ htdocs \ coke \ ApproveImage.php в строке 11 Предупреждение: DOMDocument :: load(): начальный тег ожидается, '<' не найден в файле:/C: /xampp/htdocs/coke/deleted.xml, строка: 1 в C: \ xampp \ htdocs \ coke \ ApproveImage.php в строке 11 Примечание: попытка получить свойство не-объекта в C: \ xampp \ htdocs \ coke \ ApproveImage.php в строке 13 Неустранимая ошибка: вызов члену function appendChild() на не-объекте в C: \ xampp \ htdocs \ coke \ ApproveImage.php в строке 22 –

+0

Ох, конечно, он нуждался в контенте для поддержки, спасибо mate –

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