2013-04-01 2 views
1

Я бегу PHP5 на Linux Сервер ApachePHP SimpleXML replaceChild() Ошибка: «Вызов неопределенной метод [...]»

Я пытаюсь использовать XML в моем веб-сайте в качестве простой базы данных.

Мне нужно поднять целое число (содержимое узла) на единицу и сохранить файл.

Сообщение об ошибке: Вызов неопределенной метод SimpleXMLElement :: replaceChild()

Вот мой код:

<?php 
$x = $_GET['x']; 
$y = $_GET['y']; 
$z = $_GET['z'];   
$dom = simplexml_load_file("questions.xml"); 
if ($dom->question['id'] == $x) { 
    $poll = $dom->question->poll; 
    if ($z == 0) { 
     $yes = $poll->yes; 
     $upper = $yes + 1; 
     $yes->replaceChild($yes, $upper); 
    } elseif ($z == 1) { 
     $no = $poll->no; 
     $lower = $no + 1; 
     $no->replaceChild($no, $lower); 
    } 
} 
?> 

questions.xml

<?xml version="1.0" encoding="utf-8" ?> 
<questions> 
    <question id="does-god-exist"> 
    <poll> 
     <yes>0</yes> 
     <no>0</no> 
    </poll> 
    </question> 
</questions> 
+0

Вы можете использовать 'DOMDocument :: load(): загрузить XML из файла', а затем продолжить. – SparKot

ответ

1

replaceChild является метод класса DOMNode, а не simpleXML. SimpleXML не предоставляет никакого способа заменить или удалить ребенка, поэтому вам необходимо использовать dom_import_simplexml, а затем вы можете использовать функцию replaceChild в преобразованном объекте DOM.

+0

Каким будет решение? есть ли альтернатива для библиотеки simpleXML? –

+0

Да, вы можете преобразовать свой объект simpleXML в объект DOM, используя dom_import_simplexml – m4t1t0

1

У вас есть это:

$yes = $poll->yes; 
$upper = $yes + 1; 
$yes->replaceChild($yes, $upper); 

... где $yes является SimpleXMLElement объект и такой класс не имеет replaceChild() метод. Я думаю, вы хотите что-то вроде этого:

$poll->yes++; 
Смежные вопросы