@heahoh
Full stackoverflow developer

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

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

Как подсказал уважаемый krypt3r: необходимо указывать относительный путь, не использовать корневой слэш в начале.
  • Вопрос задан
  • 530 просмотров
Решения вопроса 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
Ни тестового примера, ни кода, ничего... Что мы должны ответить?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы