Intereting Posts
Преобразование на сегодняшний день в PHP из формата yyyymmdd Как создать пустой массив в PHP с предопределенным размером? Как конвертировать HTML-код или данные, содержащие (тег изображения и некоторый текст) в изображение для загрузки Сводка показаний и итогов платежей скрыть в PayPal адаптивный платеж войти в wordpress PHP Неустранимая ошибка: вызов функции-члена bind_param () для объекта без объекта Laravel – установить глобальную переменную из таблицы настроек Получение текстовой части узла с использованием php Simple XML Нарушение целостности Mysql / PDO Duplicate Primary – хотя ничего уже в таблице Какова наилучшая практика для PHP постоянно проверять изменения в базе данных? PHP file_get_contents с php нетронутыми? Встраиваемая Google Analytics «Flair»? ошибка парсера: ожидаемый стартовый тег, '<' не найден Как определить максимальное ограничение загрузки файлов в php Кодировать URL из C #, расшифровывать URL-адрес в PHP (добавляются дополнительные символы)

Могу ли я использовать SimpleXML & Xpath для непосредственного выбора атрибута Elements?

ie – я хочу вернуть строку «yellow», используя что-то вроде выражения xpath «// banana / @ color» и следующий пример xml …

<fruits> <kiwi color="green" texture="hairy"/> <banana color="yellow" texture="waxy"/> </fruits> $fruits = simplexml_load_string( '<fruits> <kiwi color="green" texture="hairy"/> <banana color="yellow" texture="waxy"/> </fruits>'); print_r($fruits->xpath('//banana/@color')); 

производит

 Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [color] => yellow ) ) ) 

тогда как я бы предпочел что-то вроде …

 Array ( [0] => SimpleXMLElement Object ( [0] => yellow ) ) 

… так что мне не нужно писать специальный случай в приложение, которое я пишу.

Огромное спасибо! 🙂

Я просто дал вашему тесту выстрел, потому что мне было любопытно, и я обнаружил, что на самом деле он создает yellow значение строки при преобразовании в строку.

 $fruits = simplexml_load_string( '<fruits> <kiwi color="green" texture="hairy"/> <banana color="yellow" texture="waxy"/> </fruits>'); $found = $fruits->xpath('//banana/@color'); echo $found[0]; 

Казалось бы, именно так представлены SimpleXmlElement атрибутов SimpleXmlElement . Таким образом, вы можете использовать это как (string) $found[0] если вы не печатаете / не эхом его прямо.

Конечно, если вы в зависимости от значения, остающегося SimpleXMLElement то это может быть проблемой, я полагаю. Но я бы подумал, что просто вспомнить, как бросать как строку, когда вы идете использовать узел позже, все равно выполнимо.

Если вам действительно нужен подробный интерфейс для узлов, поддерживающих атрибут в качестве узла, тогда вы можете просто переключиться на DOMDocument . Вы получите код более подробный, но реализация более понятна.