2013-10-01 19 views
0

У меня есть файл XML, как это:Как получить прямой доступ к дочернему узлу для обновления/удаления?

<participants> 
    <participant> 
    <number>1</number> 
    <name>toto</name> 
    </participant> 
    <participant> 
    <number>2</number> 
    <name>titi</titi> 
    </participant> 
    <participant> 
    <number>3</number> 
    <name>tata</titi> 
    </participant> 
</participants> 

У меня есть номер участника и хочу получить доступ непосредственно к узлу, чтобы обновить или удалить его.

Неверная проблема $x Из-за echo $x->number и echo $x->name пусто, а if - неверно.

$x = $participant->item($number); 

    echo 'number = '.$x->number; 
    echo 'name = '.$x->name; 

Любая помощь пожалуйста. Благодарю.

$number=2; 
if ($xml = file_get_contents($file)) 
{ 
    $xmldoc = new DOMDocument('1.0', 'utf-8'); 
    $xmldoc->loadXML($xml, LIBXML_NOBLANKS); 

    // find the participants tag 
    $root = $xmldoc->getElementsByTagName('participants')->item(0); 

    // get the list of participant node 
    $participant = $xmldoc->getElementsByTagName('participant') ; 
    echo $participant->length; // I have a good number of participant node 

      // get the node with the number i want 
    $x = $participant->item($number); 

    echo 'number = '.$x->number; 
    echo 'name = '.$x->name; 

    if ($x->number == $number) { 
     echo "remove"; 
     $participant.removeChild($x); 
    } 
} 

ответ

0

Это работа для меня.

<?php 
$number=2; 
if ($xml = file_get_contents("a.xml")) 
{ 
    $xmldoc = new DOMDocument('1.0', 'utf-8'); 
    $xmldoc->loadXML($xml, LIBXML_NOBLANKS); 

    // find the participants tag 
    $root = $xmldoc->getElementsByTagName('participants')->item(0); 

    // get the list of participant node 
    $participant = $xmldoc->getElementsByTagName('participant'); 
    $participant->length; // I have a good number of participant node 

      // get the node with the number i want 
    $name_get = $participant->item($number-1)->getElementsByTagName('number')->item(0)->nodeValue; 
    $number_get = $participant->item($number-1)->getElementsByTagName('number')->item(0)->nodeValue; 

    echo 'number = '.$name_get; 
    echo 'name = '.$number_get; 

    if ($number_get == $number) { 
     echo "remove"; 
     $removing_node = $participant->item($number_get-1); 
     $root->removeChild($removing_node); 
    } 
} 
echo $xmldoc->saveXML(); 
+0

Большое спасибо. Он работает отлично. Но я не понимаю логику, что не так, когда я пытаюсь получить доступ к $ member-> item ($ number) (ok для ошибки $ number-1) и после $ x-> number? –

+0

Функция item() возвращает DOMElement, а DOMElement имеет методы, но не переменные или элементы. –

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