2015-08-01 2 views
1

я знаю несколько о PHP, так что извините за вопрос:Подсчитайте, сколько детей в XML с PHP

у меня есть этот файл XML:

<?xml version="1.0" encoding="ISO-8859-1"?> 
    <alert> 
    <status> </status> 
    <nothing> </nothing> 
    <info> 
    <area> 
    </area> 
    </info> 
    <info> 
    <area> 
    </area> 
    </info> 
    <info> 
    <area> 
    </area> 
    </info> 
    </alert> 

я должен сделать для цикла и внутри «foreach» для каждого Проблема в том, что я не уверен, что это способ узнать, сколько раз мне приходилось повторять цикл for. Потому что в этом файле XML (то есть пример) я не знаю, сколько

Хороша, если:

$url = "pathfile"; 
$xml = simplexml_load_file($url); 
$numvulcani = count($xml->alert->info); // is good ? 

for ($i = 0; $i <= $numvulcani; $i++) { 
foreach ($xml->alert->info[$i] as $entry) { 
    $area = $entry->area; 
} 
} 

верно?

жаль плохой английский

+1

Что вы хотите добиться? Вы пробовали цикл foreach? –

+0

Мне хотелось бы знать, если count() в моем примере хорошо:/ –

ответ

0

Попробуйте заменить foreach ($xml->alert->info[$i] as $entry) с:

foreach ($xml->alert->info[$i] as $j => $entry) 

Текущий индекс элемент будет $j

+0

Простите, в чем разница? count() верно? –

+0

ничего ????????? –

+0

Да, 'count()' отлично – boylett

3

Вы должны использовать SimpleXMLElement :: подсчитывать функцию для этого - Он подсчитывает детей элемента.

<?php 
$xml = <<<EOF 
<people> 
<person name="Person 1"> 
    <child/> 
    <child/> 
    <child/> 
</person> 
<person name="Person 2"> 
    <child/> 
    <child/> 
    <child/> 
    <child/> 
    <child/> 
</person> 
</people> 
EOF; 

$elem = new SimpleXMLElement($xml); 

foreach ($elem as $person) { 
    printf("%s has got %d children.\n", $person['name'], $person->count()); 
} 
?> 

Выход будет выглядеть следующим образом:

Person 1 имеет 3 детей. У человека 2 есть 5 детей.

Также смотрите по этой ссылке: xml count using php

0

Вы, возможно, усложнять это немного, поскольку это новое для вас.

Прежде всего, вам не нужно ссылаться на предупреждении корневого элемента, как $xml->alert, потому что SimpleXMLElement имени переменной $xml представляет этот элемент документа уже.

И второе, что вам не нужно рассчитывать здесь, вы можете просто foreach непосредственно:

foreach ($xml->info as $info) { 
    echo ' * ', $info->asXML(), "\n"; 
} 

Это перебирает те трех информации элементов, которые являются детьми оповещения элемента.

Я рекомендую Basic SimpleXML usage guide in the PHP manual для хорошего начала работы с SimpleXML.

Смежные вопросы