Теги XML неправильно закрыты в PHP foreach - PullRequest
0 голосов
/ 11 марта 2019

Я использую 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 Ответ

1 голос
/ 11 марта 2019

Проблема в том, что когда вы добавляете элементы ...

$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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...