Задать вопрос
@heahoh
Full stackoverflow developer

Php simple xml как выполнить xpath на узел?

При парсинге выгрузки из 1с столкнулся с проблемой, что xpath работает только на весь файл, как при выборе жесткого, так и относительного пути. Однако на полученный элемент, который тоже является объектом simple_xml_element xpath работать отказывается, даже если пытаюсь выбрать все ноды объекта через '//*'. В чем может быть проблема, может кто знает.

Как подсказал уважаемый krypt3r: необходимо указывать относительный путь, не использовать корневой слэш в начале.
  • Вопрос задан
  • 540 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
@heahoh Автор вопроса
Full stackoverflow developer
Забирается необходимый кусок выгрузки (товары, категории, офферы или еще что)
$path = explode('/', $className->part);
$path = implode('/' . $this->ns, $path);
$this->xml->xpath('//' . $this->ns . $path);
Для товаров
public $part = 'Каталог/Товары';
Потом
foreach ($this->xml[0] as $item) {
// Какие-либо действия с нодом.
// Однако xpath на ноду уже не работает
}

Как оказалось было 2 проблемы:
1) для каждой ноды нужно устанавливать нэймспэйс
2) xpath запрос к ноду опрашивает весь родительский элемент, то есть xpath выполняется к $xml вместо $item
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@krypt3r
Ни тестового примера, ни кода, ничего... Что мы должны ответить?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽