我试图用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
工作代码(感谢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>";
}
答案 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不完整所以请注意它更像是伪代码而不是完整的解决方案。