simplexmlelement simplexml_load_file recorrer new leer imprimir con atributos php xml xpath simplexml netflix

php - simplexml_load_file - simplexmlelement laravel



SimpleXML: selección de elementos que tienen un cierto valor de atributo (2)

Acabo de hacer una función para hacer esto por mí; sin embargo, solo agarra el primer resultado. Su experiencia puede ser diferente.

function query_attribute($xmlNode, $attr_name, $attr_value) { foreach($xmlNode as $node) { switch($node[$attr_name]) { case $attr_value: return $node; } } }

Uso:

echo query_attribute($MySimpleXmlNode->Customer, "type", "human")->Name;

(Para el XML a continuación)

<Root><Customer type="human"><Name>Sam Jones</name></Customer></Root>

En un documento XML, tengo elementos que comparten el mismo nombre, pero el valor de un atributo define qué tipo de datos son, y quiero seleccionar todos aquellos elementos que tienen un cierto valor del documento. ¿Debo usar XPath (y si es así, podría sugerir la sintaxis correcta) o hay una solución más elegante?

Aquí hay un ejemplo de XML:

<object> <data type="me">myname</data> <data type="you">yourname</data> <data type="me">myothername</data> </object>

Y quiero seleccionar el contenido de todas <data> etiquetas <data> hijos de <object> cuyo tipo me .

PD: estoy tratando de interactuar con la API de Netflix usando PHP; esto no debería importar para mi pregunta, pero si quieres sugerir una buena o mejor manera de hacerlo, soy todo oídos.


Prueba este XPath:

/object/data[@type="me"]

Asi que:

$myDataObjects = $simplexml->xpath(''/object/data[@type="me"]'');

Y si el object no es la raíz de su documento, use //object/data[@type="me"] lugar.