simplexmlelement simplexml_load_string simplexml_load_file new imprimir ejemplo array php xml rss simplexml

simplexml_load_string - php simplexml obtener un elemento específico basado en el valor de un campo



simplexmlelement php ejemplo (2)

¿Hay alguna forma de obtener un elemento específico con SimpleXML?

Por ejemplo, me gustaría obtener el título de un elemento con ID configurado en 12437 con este ejemplo xml:

<items> <item> <title>blah blah 43534</title> <id>43534</id> </item> <item> <title>blah blah 12437</title> <id>12437</id> </item> <item> <title>blah blah 7868</title> <id>7868</id> </item> </items>


Aquí hay 2 formas sencillas de hacer lo que desea, una es iterar con cada elemento de esta manera:

<?php $str = <<<XML <items> <item> <title>blah blah 43534</title> <id>43534</id> </item> <item> <title>blah blah 12437</title> <id>12437</id> </item> <item> <title>blah blah 7868</title> <id>7868</id> </item> </items> XML; $data = new SimpleXMLElement($str); foreach ($data->item as $item) { if ($item->id == 12437) { echo "ID: " . $item->id . "/n"; echo "Title: " . $item->title . "/n"; } }

Demo en vivo.

El otro usaría un XPath, para señalar los datos exactos que desea de esta manera:

<?php $str = <<<XML <items> <item> <title>blah blah 43534</title> <id>43534</id> </item> <item> <title>blah blah 12437</title> <id>12437</id> </item> <item> <title>blah blah 7868</title> <id>7868</id> </item> </items> XML; $data = new SimpleXMLElement($str); // Here we find the element id = 12437 and get it''s parent $nodes = $data->xpath(''//items/item/id[.="12437"]/parent::*''); $result = $nodes[0]; echo "ID: " . $result->id . "/n"; echo "Title: " . $result->title . "/n";

Demo en vivo.


Desea usar Xpath para esto. Básicamente es exactamente el mismo que se describe en SimpleXML: Seleccionar elementos que tienen un cierto valor de atributo, pero en su caso no está decidiendo sobre un valor de atributo sino sobre un valor de elemento.

Sin embargo, en Xpath, el elemento que estás buscando es el padre. Por lo tanto, la formulación de la expresión xpath es un poco directa:

// Here we find the item element that has the child <id> element // with node-value "12437". list($result) = $data->xpath(''(//items/item[id = "12437"])[1]''); $result->asXML(''php://output'');

Salida (embellecida):

<item> <title>title of 12437</title> <id>12437</id> </item>

Así que vamos a ver el corazón de esta consulta xpath nuevamente:

//items/item[id = "12437"]

Está escrito como: Seleccione todos los <item> que sean hijos de cualquier <items> que por sí solos tengan un elemento hijo llamado <id> con el valor "12437" .

Y ahora con las cosas faltantes:

(//items/item[id = "12437"])[1]

El paréntesis alrededor dice: De todos estos <item> , elija el primero solamente. Dependiendo de su estructura, esto podría ser necesario o no.

Así que aquí está el ejemplo de uso completo y demostración en línea :

<?php /** * php simplexml get a specific item based on the value of a field * @lin https://.com/q/17537909/367456 */ $str = <<<XML <items> <item> <title>title of 43534</title> <id>43534</id> </item> <item> <title>title of 12437</title> <id>12437</id> </item> <item> <title>title of 7868</title> <id>7868</id> </item> </items> XML; $data = new SimpleXMLElement($str); // Here we find the item element that has the child <id> element // with node-value "12437". list($result) = $data->xpath(''(//items/item[id = "12437"])[1]''); $result->asXML(''php://output'');

Entonces, lo que usted llama un campo en el título de su pregunta es por el libro un elemento secundario. Tenga esto en cuenta cuando busque consultas xpath más complicadas que le proporcionen lo que está buscando.