XML-узел getelementsbytagname дублирующая информация - PullRequest
1 голос
/ 07 сентября 2011

Эта функция php читает файл xml, ищет узел и копирует его в узел.Если узел имеет только один элемент, код дублирует этот элемент и дважды записывает его в узел.Мне интересно, почему это происходит.

Вот файл PHP.

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

function backup_urls( $nodeid ) {

$dom = new DOMDocument();
$dom->load('communities.xml');

$dom->formatOutput = true; 
$dom->preserveWhiteSpace = true;

// get document element  

$xpath = new DOMXPath($dom);
$nodes = $xpath->query("//COMMUNITY[@ID='$nodeid']"); 

if ($nodes->length) {

   $node = $nodes->item(0); 

   $xurls = $xpath->query("//COMMUNITY[@ID='$nodeid']/URLS");

   if ($xurls->length) {

    $xurle = $xpath->query("//COMMUNITY[@ID='$nodeid']/URLS_BACKUP");
    echo "backup length: ".$xurle->length;
    if ($xurle->length) $node->removeChild($xurle->item(0));

    $xurlb = $dom->createElement("URLS_BACKUP"); 
    $node->appendChild($xurlb);

    $urldelete = $xurls->item(0);

    $xurll = $urldelete->getElementsByTagName ("URL");

    foreach($xurll as $url)
    { 
      $urlid = $url->getAttribute('ID');
      $xurl = $dom->createElement("URL");
      $xurl->setAttribute("ID", $urlid);
      $xurlb->appendChild($xurl);

      $name = $url->getElementsByTagName("NAME")->item(0)->nodeValue;
      $xuname     = $dom->createElement("NAME");
      $xunameText = $dom->createTextNode($name);
      $xuname->appendChild($xunameText);
      $xurl->appendChild($xuname);

      $urllink = $url->getElementsByTagName("URLC")->item(0)->nodeValue;
      $xulink     = $dom->createElement("URLC");
      $xulinkText = $dom->createTextNode($urllink);  
      $xulink->appendChild($xulinkText); 
      $xurl->appendChild($xulink); 

      echo "urlid: ".$urlid." name: ".$name." link: ".$urllink;
    }

    $node->removeChild($urldelete);

   }

}

$dom->save('communities.xml');
}

echo backup_urls(trim($_REQUEST['nodeid']));

Вот файл XML, который php читает для записи резервных узлов.1008 * Спасибо.

...