#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);