我正在使用一个foreach来生成ArticoloPrenotazione节点,但是结果不符合预期,每个节点都在最后关闭。有办法解决这个问题吗?
foreach ($order->get_items() as $item_id => $item_data) {
$product = $item_data->get_product();
$product_id = $product->get_id();
$item_quantity = $item_data->get_quantity();
$barcode = get_post_meta( $product->get_id(), 'barcode', true );
$xml->Body->AddPrenotazione->articoli->addChild('ArticoloPrenotazione', '');
$xml->Body->AddPrenotazione->articoli->ArticoloPrenotazione->addChild('ArticoloBarcode', $barcode);
$xml->Body->AddPrenotazione->articoli->ArticoloPrenotazione->addChild('Quantita', $item_quantity);
}
错误的输出
<ArticoloPrenotazione>
<ArticoloBarcode>0000050677771</ArticoloBarcode>
<Quantita>2</Quantita>
<ArticoloBarcode>0000050972647</ArticoloBarcode>
<Quantita>1</Quantita>
<ArticoloBarcode>0000050960989</ArticoloBarcode>
<Quantita>1</Quantita>
<ArticoloBarcode>0000050961634</ArticoloBarcode>
<Quantita>2</Quantita>
</ArticoloPrenotazione>
<ArticoloPrenotazione/>
<ArticoloPrenotazione/>
<ArticoloPrenotazione/>
预期结果
<ArticoloPrenotazione>
<ArticoloBarcode>0000050677771</ArticoloBarcode>
<Quantita>2</Quantita>
</ArticoloPrenotazione>
<ArticoloPrenotazione>
<ArticoloBarcode>0000050972647</ArticoloBarcode>
<Quantita>1</Quantita>
</ArticoloPrenotazione>
<ArticoloPrenotazione>
<ArticoloBarcode>0000050960989</ArticoloBarcode>
<Quantita>1</Quantita>
</ArticoloPrenotazione>
<ArticoloPrenotazione>
<ArticoloBarcode>0000050961634</ArticoloBarcode>
<Quantita>2</Quantita>
</ArticoloPrenotazione>
答案 0 :(得分:1)
问题在于,当您添加元素时...
$xml->Body->AddPrenotazione->articoli->addChild('ArticoloPrenotazione', '');
$xml->Body->AddPrenotazione->articoli->ArticoloPrenotazione->addChild('ArticoloBarcode', $barcode);
$xml->Body->AddPrenotazione->articoli->ArticoloPrenotazione->addChild('Quantita', $item_quantity);
第一行创建新元素-但后两行应将其值添加到此新节点。使用articoli->ArticoloPrenotazione->addChild()
时,默认情况下会将它们添加到第一个<ArticoloPrenotazione>
节点(如您所见)。要将它们添加到新节点,您可以通过存储第一个addChild()
的返回值并将新节点添加到该节点中来完成此操作。
$newNode = $xml->Body->AddPrenotazione->articoli->addChild('ArticoloPrenotazione', '');
$newNode->addChild('ArticoloBarcode', $barcode);
$newNode->addChild('Quantita', $item_quantity);