Я думаю, что я что-то действительно очевидное здесь отсутствует, но может кто-нибудь объяснить мне, почему я получаю выход я, и не выход я ожидаю на следующей вар отвалов:обнаруживая SimpleXml массив недвижимости
Вот оригинальный XML:
<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>
Что я делаю:
$xml = new SimpleXMLElement($file);
foreach($xml->category as $node)
{
echo "dump 1:
";
var_dump($node);
echo "**********************************************
dump 2:
";
var_dump($node->subcategory);
die();
}
Этот выход:
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"
}
Первая переменная дамп выводит то, что я ожидал, но выход я ожидал бы на второй var_dump будет:
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"
}
}
или даже объект, содержащий все элементы массива. Почему это не так?
Я вижу, когда я вызываю var_dump($node->subcategory)
, он сбрасывает первый найденный узел «подкатегории», но почему же он передает все узлы «подкатегории» в массив для первого дампа var, но не для второго? И как бы я воспроизвел это поведение, чтобы определить, содержит ли «подкатегория» более одного объекта (как в первом дампе var)?
В основном то, что я пытаюсь сделать, это обнаружить, если свойство SimpleXMLElement содержит массив несколько значений (например, если он содержит дочерние узлы)
Я пробовал всякие, но я не могу похоже, обнаруживают, что одно из свойств объекта simpleXml содержит набор массивов.
Update:
Я нашел это работает:
if(count($node->subcategory)>1)
{
// we have more than one subcategory
}
Но это не самый изящный способ, я уверен, что там должен быть чище метод?
ответ на этот пост может помогите вам: http://stackoverflow.com/questions/2751711/php-get-values-from-simplexmlelement-array?rq = 1 ** var_dump ($ node ["subcategoy"]); ** – feskr
@feskr thanks, я нажимаю все свойства (и, следовательно, атрибуты) через цикл foreach в своем действительном коде, и это не кажется различать атрибуты и свойства, что является проблемой! – Stu
@feskr 'var_dump ($ node [" subcategory "])' выходы: 'NULL' – Stu