Lobochkin
@Lobochkin
PHP Bitrix Vue Laravel

Как из XML достать значение тега зная значения его атрибута?

Всем доброго дня!
Есть XML
<offer available="false" id="6014">
    <outlets>
      <outlet id="16" instock="26"/>
      <outlet id="36" instock="0"/>
    </outlets>
    <url/>
    <price>2062.00</price>
    <rrc_prcie>0.00</rrc_prcie>
    <categoryId>31</categoryId>
    <currencyId>RUB</currencyId>
    <name>CP 155/70R13 75T Cordiant Winter Drive PW-1</name>
    <model></model>
    <vendorCode>122973</vendorCode>
    <vendor/>
    <description>Описание отсутствует.</description>
    <param name="Шипы">Нешипованная</param>
    <param name="Назначение">легковая</param>
    <param name="Runflat">Нет</param>
    <param name="Типоразмер">155/70</param>
    <param name="Размер">R13</param>
    <param name="Конструкция шины">Радиальная</param>
    <param name="Камерность">Бескамерная</param>
    <param name="Шипы">Нешипованная</param>
    <param name="Скорость">190</param>
    <param name="Нагрузка на одинарную шину">387</param>
    <param name="Сезон">ЗИМНЯЯ</param>
    <param name="Не выгружать">Нет</param>
    <param name="Не включать в прайс">Нет</param>
    <param name="Модель шины">Winter Drive PW-1</param>
    <param name="Страна">отечественная</param>
    <param name="Объем коэффициент">1,1</param>
    <param name="Производитель">Cordiant</param>
    <param name="Код производителя">448496981</param>
    <param name="Ширина шины">155</param>
    <param name="Высота шины">70</param>
    <param name="Посадочный диаметр шины">13</param>
    <param name="Сезонность">Зимняя</param>
    <param name="Индекс скорости">T</param>
    <param name="Индекс нагрузки">387</param>
    <param name="Модель">Winter Drive PW-1</param>
    <param name="Марка (бренд)">Cordiant</param>
</offer>';

Как достать значение Winter Drive PW-1 из тега param зная name(Модель) не используя регулярки, с помощью SimpleXMLElement или похожих функций раскладывающих XML на объект
Я написал такую функцию
function get_param ($xml_str, $param_name = '') 
{
	$xml = new SimpleXMLElement($xml_str);
	foreach ($xml as $key => $param) {
		if ($param['name'] == $param_name) {
			return (string)$param;
		}
	}
	return 'нет такого name';
}

Но она не очень универсальна и как то сложна, мне кажется есть проще способ
  • Вопрос задан
  • 219 просмотров
Решения вопроса 1
DevMan
@DevMan
use xpath Luke
https://3v4l.org/DG2Kk
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы