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
. Вы получите код более подробный, но реализация более понятна.