#php #xml
#php #xml
Вопрос:
У меня есть следующее содержимое xml :
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value>
<array>
<data>
<value>
<array>
<data>
<value>
<string>Car</string>
</value>
<value>
<string>1</string>
</value>
</data>
</array>
</value>
<value>
<array>
<data>
<value>
<string>Plane</string>
</value>
<value>
<string>2</string>
</value>
</data>
</array>
</value>
<value>
<array>
<data>
<value>
<string>Boat</string>
</value>
<value>
<string>3</string>
</value>
</data>
</array>
</value>
</data>
</array>
</value>
</param>
</params>
</methodResponse>
Я хотел бы восстановить число 3
, зная только данные Boat
Вот что я сделал :
$xml = new SimpleXMLElement($response);
$arr_response = $xml->params->param->value->array->data->value->array->data;
foreach ($arr_response as $key => $value) {
if($key == "Boat"){
echo "Found !";
echo "$key -> $value";
}else{
echo "Not found";
}
}
Вывод :
Not found
Комментарии:
1. У вас здесь опечатка
foreach ($arr_res as $key => $value) {
arr_res должно быть arr_response?2. Пожалуйста, включите правильное сообщение об ошибках PHP во время разработки, тогда у PHP будет возможность предупредить вас о таких ошибках самостоятельно.
Ответ №1:
Поскольку вы имеете дело с xml, проще просто использовать xpath:
$xml = simplexml_load_string($response);
$boat = $xml->xpath('//data//value[string="Boat"]/following-sibling::value/string');
echo $boat[0];
Вывод:
3
Комментарии:
1. @executable Поверьте мне в этом — определенно стоит ознакомиться с xpath.
Ответ №2:
Вы могли бы использовать DomDocument
как в
$doc = new DOMDocument();
$doc->loadXML($data);
$xpath = new DOMXPath($doc);
foreach ($xpath->query("//data[./value[1]/string[contains(text(), 'Boat')]]") as $boat) {
echo $boat->getElementsByTagName("string")[1]->textContent;
}