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.