Работа с Simple XML
Всем привет! Помогите знающие люди:
Не могу добраться до узлов XML дереве. Вот пример XML-файла:
<?xml version="1.0" encoding="utf-8"?>
<Dictionary>
<Item>
<CFO_CODE>12345</CFO_CODE>
<CFO_NAME>Предприятие_0</CFO_NAME>
<TECH_NAME>TEST1</TECH_NAME>
</Item>
<Item>
<CFO_CODE>7890</CFO_CODE>
<CFO_NAME>Предприятие_1</CFO_NAME>
<TECH_NAME>TEST2</TECH_NAME>
</Item>
<Item>
<CFO_CODE>5689</CFO_CODE>
<CFO_NAME>Предприятие_2</CFO_NAME>
<TECH_NAME>TEST3</TECH_NAME>
</Item>
</Dictionary>
Мне нужно собрать в 1 массив все значения узлов CFO_CODE.
Вот что есть на данный момент: Тестирую, используя Postman
Точка входа (первым вызывается метод updateDictionary):
public static function updateDictionary($params)
{
$content = file_get_contents('php://input');
$xml = new \SimpleXMLElement($content);
$items = $xml->xpath('/Dictionary/Item');
self::addOrUpdateDictionaryCFO('cfo', $items);
return'success';
}
public static function addOrUpdateDictionaryCFO($iblockCode, $data)
{
$iblockId = IblockHelper::getIblockIdByCode($iblockCode);
foreach ($data as $dataItem) {
$cfoCodes[] = $dataItem->CFO_CODE;
}
}
Проблема в том, что в $cfoCodes лежат не значения узлов, а объекты, а как добраться до самих значений - пока не знаю. Помогите пожалуйста.
Скриншот того, что лежит в $cfoCodes прикрепил.

Ответы (1 шт):
Автор решения: TemirStack
→ Ссылка
Как другой вариант вот:
$cfoCodeValues = [];
$dDoc = new DOMDocument;
$dDoc->load('data.xml');
// $dDoc->loadXML($content);
$dd = $dDoc->getElementsByTagName('Dictionary');
for ($i = 0; $i < $dd->length; $i++) {
$cn = $dd->item($i)->childNodes;
for ($j = 0; $j < $cn->length; $j++) {
$cnk = $cn->item($j)->childNodes;
for ($k = 0; $k < $cnk->length; $k++) {
if ($cnk->item($k)->nodeName != "CFO_CODE") continue;
$cfoCodeValues[] = $cnk->item($k)->nodeValue;
}
}
}
echo "<pre>"; print_r($cfoCodeValues); echo "</pre>\n";