В коде интернет-магазина есть фрагмент:
if (!file_exists($xml_file) || !$xml = @simplexml_load_file($xml_file)) {
$this->errors[] = "cannot load";
return false;
}
if (!$xml['version'] || !$xml['name']) {
$this->errors[] = "version and name required";
return false;
}
Пример обрабатываемого XML:
<?xml version="1.0" encoding="UTF-8" ?>
<theme>
<version value="1.4">
<ccc available="true" />
<guest_checkout available="true" />
<one_page_checkout available="true" />
<store_locator available="true" />
</version>
<name value="Sound Theme" />
</theme>
Проблема в том, что условие (!$xml['version'] || !$xml['name']) возвращает false, несмотря на то, что элементы version и name в xml есть. Пробовал обращаться к ним в стиле $xml->{'version'} - все работает.
Не может быть, что в таком крупном продукте неправильно написали код работы с XML. Может быть, доступ к элементам через синтаксис [] работает с определенной версии PHP? У меня версия 5.3.13.
Прошу подсказать, в чем может быть проблема и как ее исправить, не меняя исходный код интернет-магазина.
Начнем с того что синтаксис $xml['version'] говорит о том, что у объекта $xml берется значение аттрибута.
В вашем же $xml
<theme>
<version value="1.4">
<ccc available="true" />
<guest_checkout available="true" />
<one_page_checkout available="true" />
<store_locator available="true" />
</version>
<name value="Sound Theme" />
</theme>
у корневого элемента theme этих аттрибутов нет.
Потому то и не проходит проверка
!$xml['version'] || !$xml['name']
Для того чтобы разобраться, я скачал бесплатный шаблон для prestashop (вообще не знаю зачем). И в нем я увидел приблизительно следующее:
<theme version="1.0" name="dixio" directory="dixio">
<author name="Presta Theme Maker" email="presta.theme.maker@gmail.com" url="http://presta-theme-maker.com/"/>
Видите? Здесь у тега theme есть оба проверяемых аттрибута.
Таким образом, вывод - предоставленный вами xml-файл имеет неподдерживаемый скриптом импорта/экспорта формат.
Попробуйте вот так. Надеюсь что помог
$xml->version[0]['value'];
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости