Intereting Posts
Как создать случайную дату между двумя датами, используя php? Unlink Fails -> open_basedir issue Warning: unlink () : действующее ограничение open_basedir. Файл () не входит в допустимые пути: Возможно ли получить путь сохраненного файла cookie? WordPress: создание нового поля usermeta для пользователей Как правильно использовать маркеры-носители? выберите временную метку старше, чем скопировать весь каталог, но исключить некоторые файлы php Как получить кратчайшее, а не максимально возможное совпадение регулярных выражений с preg_match () Ошибка AWS SDK – подпись еще не указана Как заставить MySQL рассматривать символ подчеркивания как разделитель слов для полнотекстового поиска? почему я получаю фатальную ошибку PHP, когда я хочу установить расширение Установка времени ожидания соединения PDO менее 1 секунды PHP – EC2 Реализация SES – Справка Преобразование специальных символов в PHP регулярное выражение php для видео swf

Как проверить, существует ли элемент с SimpleXML?

У меня есть следующий (упрощенный XML):

<?xml version="1.0" encoding="UTF-8" ?> <products> <product> <artnr>xxx1</artnr> </product> </products> 

И следующий (снова упрощенный PHP-код):

 $xml= @simplexml_load_file($filename); foreach ($xml->product as $product) { if (!$this->validate_xml_product($product)) { continue; } } function validate_xml_product($product) { if (!property_exists('artnr', $product)) { // why does it always validate to true? } } 

По какой-то причине продукт никогда не проверяет.

Является ли property_exists правильным способом выяснить, есть ли элемент artnr в $ product?

Порядок параметров в вашем коде отменяется. Правильно сначала объект, затем имя свойства:

 if (!property_exists($product, 'artnr')) { 

И, по-видимому, это работает только для «реальных» свойств. Если свойство реализовано с использованием метода __get -Method, это тоже не сработает.

Я думаю, что аргументы скрещены. Первым параметром должен быть класс, второй – свойство …

http://php.net/manual/de/function.property-exists.php

Использование:

 function validate_xml_product($product) { $children=$product->children(); foreach($children as $child){ if ($child->getName()=='artnr') { return true; } } return false; }