simplexml получает значение узла без typecasting

Есть ли способ получить значение узла из объекта simplexml без его литья?

 $amount = (int)$item->amount; 

По-моему, это не очень красиво, я ищу более чистый способ, но ничего не нашел!

 //wouldn't this be nice? $amount = $item->amount->getValue(); 

Заранее спасибо.

Получение значения узла без необходимости его выводить? Конечно! : 3

 class SimplerXMLElement extends SimpleXMLElement { public function getValue() { return (string) $this; } } 

Теперь вам просто нужно использовать второй параметр simplexml_load_string() чтобы получить еще более простые XML-элементы!

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

Нет. SimpleXml предоставляет только очень ограниченный API для работы с узлами. Это неявный API считается признаком. Если вам нужен больший контроль над узлами, используйте DOM :

 $sxe = simplexml_load_string( '<root><item><amount>10</amount></item></root>' ); $node = dom_import_simplexml($sxe->item->amount); var_dump($node->nodeValue); // string(2) "10" 

Функция dom_import_simplexml преобразует узел из SimpleXmlElement в DOMElement , так что вы все равно DOMElement за кулисы. Вам больше не нужно явно DOMElement при DOMElement содержимого из DOMElement .

На стороне: лично я нахожу DOM выше SimpleXml и я предлагаю не использовать SimpleXml а DOM сразу. Если вы хотите ознакомиться с ним, ознакомьтесь с некоторыми из моих предыдущих ответов об использовании DOM .

Но это самое безопасное :). Вы можете создать функцию для рекурсивного преобразования объекта в массив. Вернемся назад, когда я впервые начал работать с XML в PHP, я помню, что пришел к выводу, что литье типов – это лучший метод 🙂

Как насчет пути xpath?

 $amount = $item->amount->xpath('text()');