PHP:重新组合XML属性

时间:2016-06-02 13:13:57

标签: php xml

我试图用DOM解析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:product 2

  • sNomArticle:第1条

  • tabGrilleHoraire

    • tabDetailTarifArticle
      • tabDetail
        • sDetail: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,
);
}

循环:

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>";
}

1 个答案:

答案 0 :(得分: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不完整所以请注意它更像是伪代码而不是完整的解决方案。