¿Puedo usar SimpleXML y Xpath para seleccionar directamente un atributo de elementos?

es decir, quiero devolver una cadena “amarilla” usando algo como la expresión xpath “// banana / @ color” y el siguiente ejemplo xml …

    $fruits = simplexml_load_string( '   '); print_r($fruits->xpath('//banana/@color')); 

produce

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

mientras que yo preferiría algo así como …

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

… para que no necesite escribir un caso especial en la aplicación que estoy escribiendo.

¡muchas gracias! 🙂

Acabo de probar la prueba porque tenía curiosidad y descubrí que en realidad produce el valor de cadena yellow cuando se convierte en cuerda.

 $fruits = simplexml_load_string( '   '); $found = $fruits->xpath('//banana/@color'); echo $found[0]; 

Parecería que así es como se representan los nodos de atributo SimpleXmlElement . Entonces puede usar esto como (string) $found[0] si no está imprimiendo / haciéndolo eco directamente.

Por supuesto, si dependiendo del valor restante de un SimpleXMLElement , eso podría ser un problema, supongo. Pero pensaría que recordar usar una cadena cuando vayas a usar el nodo más tarde todavía sería factible.

Si realmente necesita una interfaz detallada para Nodos que admita un Atributo como un nodo, entonces tal vez quiera cambiar a DOMDocument . Su código será más detallado, pero la implementación es más clara.