Creo que me falta algo muy obvio aquí, pero alguien puede explicarme por qué estoy recibiendo la salida que soy y no la salida espero en el siguiente var vertederos:simplexml propiedad de matriz
Aquí el XML original:
<result>
<category>
<id>3</id>
<name>Category 1</name>
<subcategory>
<id>9</id>
<name>SubCat 1</name>
</subcategory>
<subcategory>
<id>10</id>
<name>SubCat 2</name>
</subcategory>
<subcategory>
<id>11</id>
<name>SubCat 3</name>
</subcategory>
</category>
</result>
lo que estoy haciendo:
$xml = new SimpleXMLElement($file);
foreach($xml->category as $node)
{
echo "dump 1:
";
var_dump($node);
echo "**********************************************
dump 2:
";
var_dump($node->subcategory);
die();
}
Este salidas:
dump 1:
object(SimpleXMLElement)#130 (3) {
["id"]=>
string(1) "3"
["name"]=>
string(10) "Category 1"
["subcategory"]=>
array(3) {
[0]=>
object(SimpleXMLElement)#133 (2) {
["id"]=>
string(1) "9"
["name"]=>
string(8) "SubCat 1"
}
[1]=>
object(SimpleXMLElement)#135 (2) {
["id"]=>
string(2) "10"
["name"]=>
string(8) "SubCat 2"
}
[2]=>
object(SimpleXMLElement)#136 (2) {
["id"]=>
string(2) "11"
["name"]=>
string(8) "SubCat 3"
}
}
}
**********************************************
dump 2:
object(SimpleXMLElement)#138 (2) {
["id"]=>
string(1) "9"
["name"]=>
string(8) "SubCat 1"
}
El primer volcado var da salida a lo que cabe esperar, pero la salida que se puede esperar para el segundo var_dump sería:
array(3) {
[0]=>
object(SimpleXMLElement)#133 (2) {
["id"]=>
string(1) "9"
["name"]=>
string(8) "SubCat 1"
}
[1]=>
object(SimpleXMLElement)#135 (2) {
["id"]=>
string(2) "10"
["name"]=>
string(8) "SubCat 2"
}
[2]=>
object(SimpleXMLElement)#136 (2) {
["id"]=>
string(2) "11"
["name"]=>
string(8) "SubCat 3"
}
}
O incluso un objeto que contiene todos los elementos de matriz. ¿Por qué no es este el caso?
Veo cuando llamo al var_dump($node->subcategory)
que está volcando el primer nodo de "subcategoría" que encuentra, pero ¿por qué entonces lanza todos los nodos de "subcategoría" a una matriz para el primer volcado de var pero no para el segundo? ¿Y cómo voy a imitar este comportamiento para detectar si 'subcategoría' contiene más de un objeto (como lo hace en el primer volcado de var)?
Básicamente lo que estoy tratando de hacer es detectar si una propiedad de la SimpleXMLElement contiene una matriz de varios valores (es decir, si contiene nodos hijos)
que he probado todo tipo, pero no puedo parece detectar si una de las propiedades del objeto simpleXml contiene un conjunto de matrices.
Actualización:
he encontrado que esto funciona:
if(count($node->subcategory)>1)
{
// we have more than one subcategory
}
Pero no es la forma más elegante, estoy seguro de que debe ser un método más limpio?
la respuesta a esta entrada podría ayuda: http://stackoverflow.com/questions/2751711/php-get-values-from-simplexmlelement-array?rq = 1 ** var_dump ($ nodo ["subcategoy"]); ** – feskr
@feskr gracias, estoy empujando todas las propiedades (y por lo tanto los atributos) a través de un bucle foreach en mi código actual y no parece para diferenciar entre atributos y propiedades, ¡que es un problema! – Stu
@feskr 'var_dump ($ nodo [" subcategoría "])' salidas: 'NULL' – Stu