Как получить значение определенного вложенного узла XML в PHP?

Мне нужно получить значение каждого «custom_field» с именем «ZIP» из следующего XML-файла, используя PHP.
Когда я его анализирую, я всегда получаю либо значения всех проектов, либо пустой массив?
Может кто-нибудь помочь?

<?xml version="1.0" encoding="UTF-8"?>
<projects total_count="237" offset="0" limit="100" type="array">
<project>
<id>239</id>
<name>ABC</name>
<identifier></identifier>
<description></description>
<status>1</status>
<is_public>false</is_public>
<custom_fields type="array">
<custom_field id="18" name="Name affix">
<value></value>
</custom_field>
<custom_field id="20" name="ZIP">
<value>X1111</value>
</custom_field>
</custom_fields>
<created_on>2017-06-05T16:33:13Z</created_on>
<updated_on>2017-06-19T13:46:08Z</updated_on>
</project>
<project>
<id>240</id>
<name>DEF</name>
<identifier></identifier>
<description></description>
<status>1</status>
<is_public>false</is_public>
<custom_fields type="array">
<custom_field id="18" name="Name affix">
<value></value>
</custom_field>
<custom_field id="20" name="ZIP">
<value>Y2222</value>
</custom_field>
</custom_fields>
<created_on>2017-06-05T16:33:14Z</created_on>
<updated_on>2017-06-05T16:33:14Z</updated_on>
</project>
...

Я попробовал следующее и получил пустые массивы:

$projects = simplexml_load_file($rm_host."/projects.xml?key=".$rm_sa_key."&limit=100");

foreach($projects->project as $project){

$zip = $project->xpath('//custom_field[@name="ZIP"]');

print_r($zip);
echo "<br/>";
}

Когда я пытаюсь заменить строку следующим, она возвращает значение всех элементов, а не конкретного:

zip = $project->xpath('//custom_fields[@type="array"]/custom_field[@name="ZIP"]')

-1

Решение

Наконец-то сработало после попытки и попытки.

Правильная строка для получения конкретного значения:

$zip = $project->custom_fields->xpath('custom_field[@name="ZIP"]/value')[0];

Без косой черты перед xpath.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector