В коде интернет-магазина есть фрагмент:
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'];
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок