Как передать строку из переменной php в запрос xml?

Наверное, я очень глупо сформулировала свой вопрос, но сделала все, что могла, заранее извиняюсь)

У меня есть XML-файл. Мне нужно запустить такой запрос:

$xml->shop->offers->offer

Проблема в том, что я получаю этот путь из переменной:

$path = 'shop->offers->offer'

Но это не будет работать так:

$xml = simplexml_load_file('example.com');
$exampleElement = $xml->$path;

Как я могу исправить код, чтобы он работал?

Разделите строку на массив, используя метод разнесения. Затем используйте цикл, чтобы получить каждое вложенное свойство, используя этот список.

Barmar 04.10.2023 21:14

Взгляните на XPath, он использует нечто подобное.

Nigel Ren 04.10.2023 21:38

@barmar, не могли бы вы показать на примере? Я разделю массив, но как мне использовать foreach в этом запросе? $path = explode( "->", $path);

Rediska 04.10.2023 21:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете разделить путь на его компоненты и циклично просматривать их для навигации по объекту SimpleXML.

Один из способов сделать это — использовать взрыв(). Это встроенная функция PHP, используемая для разделения строки на массив подстрок на основе указанной подстроки, по которой будет разбита входная строка. В этом случае его можно использовать для разделения пути, хранящегося в переменной $path, на массив компонентов, которые затем используются для перемещения по структуре XML.

https://www.php.net/manual/en/function.explode.php

Вы могли бы попробовать...

// Split the path into its components
$pathComponents = explode('->', $path);

// Start with the root element
$currentElement = $xml;

// Loop thru the path components and navigate thru the XML
foreach ($pathComponents as $component) {
    if (isset($currentElement->$component)) {
        $currentElement = $currentElement->$component;
    } else {
        // You can throw an exception or handle it according to your needs
        // in this example, I just broke out of the loop
        break;
    }
}

// $currentElement should now contain the desired XML element

https://www.php.net/manual/en/function.isset.php

Ну, это то, что я сделал. $path = explode( "->", $path); Что дальше?)) Как использовать foreach?

Rediska 04.10.2023 21:52

Только что обновленный ответ.

masonthedev 04.10.2023 22:06
Ответ принят как подходящий

Разделите путь, а затем пройдите по нему, получая каждое вложенное свойство.

$props = explode("->", $path);
$el = $xml;
foreach ($props as $prop) {
    $el = $el->$prop;
}
var_dump($el);

Другие вопросы по теме

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

Попытка расшифровать строку, зашифрованную с помощью PHP и расшифрованную с помощью Javascript (React JS) и Android
Добавьте метаданные несуществующего заказа, чтобы расширить поиск заказов администратора WooCommerce для конкретных продуктов
Добавьте кнопку в заказы администратора WooCommerce, которая отправляет пользовательское уведомление по электронной почте
Действие Github с Laravel для запуска тестовых случаев перед слиянием или во время сбоя запросов на извлечение
Разрешить поиск по электронной почте для выставления счетов в списке заказов администратора WooCommerce
Laravel withOnly не ограничивает запрос
Ошибка pdo_sqlsrv в процессе проверки сертификата SSL
Laravel не работает должным образом. Не удалось загрузить laravel/laravel с dist: отсутствуют команды расширения zip и unzip/7z, пропуск
Как отобразить все доступные страны доставки в столбце списка продуктов WooCommerce?
Yii2 не может установить виджет hightcharts, поскольку композитор выдает ошибки