PHP, создающий скрипт ping, должен преобразовать ответ в объект, чтобы прочитать его

#php

#php

Вопрос:

Я создаю скрипт RCP ping. Ответ, который я получаю при ping, выглядит следующим образом:

 <?xml version="1.0" ?>
<methodResponse>
    <params>
        <param>
            <value>
                <struct>
                    <member>
                        <name>flerror</name>
                        <value>
                            <boolean>0</boolean>
                        </value>
                    </member>
                    <member>
                        <name>message</name>
                        <value>
                            <string>Thanks for the ping.</string>
                        </value>
                    </member>
                </struct>
            </value>
        </param>
    </params>
</methodResponse>
  

Я хочу прочитать XML-ответ и написать сообщение пользователю. Однако для этого мне нужно преобразовать ответ в объект (я думаю).

Мой скрипт:

 $context = stream_context_create(array('http' => array(
    'method' => "POST",
    'header' => "Content-Type: text/xmlrn",
    'content' => $xml
)));
$file = @file_get_contents("https://rpc.twingly.com/", false, $context);
if ($file === false) {
    echo '<p>Could not connect!</p>';
}
elseif ($file) {


    echo '<p>The following response was returned:</p>';
    echo '<pre>'.htmlspecialchars($file).'</pre>';

    $i = 0;
    foreach ($file->params->param->value->struct->member as $object){

        $name[$i]       = $object->name;
        $value[$i]      = $object->value;

        echo"
        <p>Name: $name[$i]<br />
        Name: $value[$i]</p>
        ";

        $i  ;
    }
}
else {
    echo '<p>Empty response!</p>';
}
  

Моя ошибка:

Обратите внимание: Попытка получить свойство ‘params’ не-объекта в C:Usersusrwamp64wwwfitnesslifeblogmy_blog_ping.php в строке 556

Обратите внимание: Попытка получить свойство ‘param’ не-объекта в C:Usersusrwamp64wwwfitnesslifeblogmy_blog_ping.php в строке 556

Обратите внимание: Попытка получить свойство ‘value’ не-объекта в C:Usersusrwamp64wwwfitnesslifeblogmy_blog_ping.php в строке 556

Обратите внимание: Попытка получить свойство ‘struct’ не-объекта в C:Usersusrwamp64wwwfitnesslifeblogmy_blog_ping.php в строке 556

Обратите внимание: Попытка получить свойство ‘member’ не-объекта в C:Usersusrwamp64wwwfitnesslifeblogmy_blog_ping.php в строке 556

Предупреждение: Недопустимый аргумент, предоставленный для foreach() в C:Usersusrwamp64wwwfitnesslifeblogmy_blog_ping.php в строке 556

Комментарии:

1. Существует несколько способов чтения записи XML, таких как XmlReader или SimpleXML или etc

Ответ №1:

file_get_contents() возвращает строку, а не XML-объект.

Вы можете преобразовать его в XML-объект с simplexml_load_string() таким образом:

 $xmlfile = simplexml_load_string($file);
  

Другой подход заключается в использовании SimpleXMLElement() конструктора при получении содержимого:

 $xmlfile = new SimpleXMLElement(file_get_contents("https://rpc.twingly.com/", false, $context));
  

Комментарии:

1. Супер, я использовал $response = simplexml_load_string($file);

Ответ №2:

 $xml = new SimpleXMLElement($file);
print_r($xml);