2016-06-02 4 views
0

Я пытаюсь разобрать XML-ответ с DOM.PHP: Перегруппировать атрибуты XML

<GetBilletResult> 
    <sNomProduit>product 2</sNomProduit> 
    <sNomArticle>article 4</sNomArticle> 
    ... 
    <tabGrilleHoraire> 
     <tabDetailTarifArticle> 
      <tabDetail> 
       <sDetail>Liste Pax : Pax n°1 [Âge:19]</sDetail> 
       <sAgePax>19;</sAgePax> 
       ... 
      </tabDetail> 
     </tabDetailTarifArticle> 
     ... 
    <tabGrilleHoraire> 
</GetBilletResult> 

Мне нужно изменить порядок результатов и перегруппировать статьи по продуктам. Вывод должен выглядеть следующим образом:

  • sNomProduit: продукт 2

  • sNomArticle: статья 1

  • tabGrilleHoraire

    • tabDetailTarifArticle
      • tabDetail
        • sПодробнее: Liste Pax: Pax n ° 1 [Âge: 19]
        • sAgePax: 19;

Рабочий код (спасибо ConstantineUA):

$processed = array(); 
foreach($billets as $GetBilletResult) 
{ 
$sNomProduit = $GetBilletResult->getElementsByTagName("sNomProduit")->item(0)->nodeValue; 
$nIDProduit = $GetBilletResult->getElementsByTagName("nIDProduit")->item(0)->nodeValue; 
$sNomArticle = $GetBilletResult->getElementsByTagName("sNomArticle")->item(0)->nodeValue; 
$nIDArticle = $GetBilletResult->getElementsByTagName("nIDArticle")->item(0)->nodeValue; 
$tabDetail = $GetBilletResult->getElementsByTagName("tabDetail"); 

if (!isset($processed[$sNomProduit])) { 
    $processed[$sNomProduit] = array(); 
} 

$processed[$sNomProduit][] = array(
    'nIDProduit' => $nIDProduit, 
    'sNomArticle' => $sNomArticle, 
    'nIDArticle' => $nIDArticle, 
    'tabDetail' => $tabDetail, 
); 
} 

Loop:

foreach ($processed as $sNomProduit => $list) { 
    echo "<h3> ".$sNomProduit."</h3>"; 
    foreach ($list as $item) { 
     echo "<h5> ".$item['sNomArticle'] . "</h5>"; 
     foreach ($item['tabDetail'] as $node) { 
      var_dump ($node->nodeValue); 
     } 
    } 
    echo "<hr>"; 
} 
+0

Что вы пробовали? –

+0

Вопрос обновлен. – Senneville

ответ

1

Я думаю, что вы можете получить с дополни онные ассоциативный массив, где вы положили все, что вам узлы во время цикла:

$processed = array(); 
foreach($billets as $GetBilletResult) 
{ 
    $sNomProduit = $GetBilletResult->getElementsByTagName("sNomProduit")->item(0)->nodeValue; 
    $nIDProduit = $GetBilletResult->getElementsByTagName("nIDProduit")->item(0)->nodeValue; 
    $sNomArticle = $GetBilletResult->getElementsByTagName("sNomArticle")->item(0)->nodeValue; 
    $nIDArticle = $GetBilletResult->getElementsByTagName("nIDArticle")->item(0)->nodeValue; 

    if (!isset($processed[$sNomProduit])) { 
     $processed[$sNomProduit] = array(); 
    } 

    $processed[$sNomProduit][] = array(
     'nIDProduit' => $nIDProduit, 
     'sNomArticle' => $sNomArticle, 
     'nIDArticle' => $nIDArticle, 
    ); 
} 

А затем цикл по этому массиву для отображения результатов:

foreach ($processed as $sNomProduit => $list) { 
    echo "<b>sNomProduit : </b> ".$sNomProduit."<br>"; 
    foreach ($list as $item) { 
     echo "<b>sNomArticle : </b> ".$item['sNomArticle'] . "<br>"; 
     echo "<b>ListeTranche </b> ID_Tranche ".$item['nIDArticle'] . "<br>"; 
    } 
} 

Похоже, что ваш XML не завершенная, поэтому обратите внимание, что это больше похоже на псевдокод, а не на полное решение.

+0

Я получил это: ** Примечание: Неопределенный индекс: TEST - POUR LA RESA - PORTAVENTURA в /var/www/vhosts/xxx.php в строке 284 ** _ (то же самое для других результатов) _ 'sNomProduit: TEST - POUR LA RESA - PortAventura sNomProduit: ТЕСТ - POUR LA RESA - EUROPA-PARK 1 Jour sNomProduit: ТЕСТ - POUR LA RESA - Европа-парк 2 Jours sNomProduit: ТЕСТ 1 ... sNomProduit: Produit sNomProduit: Produit B sNomProduit: Produit C sNomProduit: COPIE -4-: Produit A' – Senneville

+0

мой плохой, я слегка отредактированный ответ, пожалуйста, обратите внимание на линии, где инициализируется новый массив ключей: если (Исеть ($ обработано [ $ sNomProduit])) { $ обработан [$ sNomProduit] = array(); } – ConstantineUA

+0

Ницца, никаких ошибок. Теперь мне нужно показывать статьи по продуктам. 'foreach ($ обрабатывается как $ sNomProduit => $ list) { echo" sNomProduit: ". $ sNomProduit."
"; Еогеасп (список $ в $ п) { // здесь идет последующего вывода информации \t эхо "****** sNomArticle:" $ sNomArticle "
";.. } } 'Этот код показывает ту же статью _sNomProduit: ТЕСТ - POUR LA RESA - Европа-Парк 1 Jour ****** sNomArticle: СТАТЬЯ A2 sNomProduit: ТЕСТ - POUR LA RESA - EUROPA-PARK 2 Jours ****** sNomArticle A2 sNomProduit: TEST 1 ****** sNomArticle.A2_ – Senneville

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