XML标签未在PHP foreach中正确关闭

时间:2019-03-11 16:01:57

标签: php xml foreach xml-parsing

我正在使用一个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>

1 个答案:

答案 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);