php simplexml在循环中添加子节点

问题描述 投票:1回答:1

我在使用SimpleXML和addChild()时遇到了麻烦。

我试图从mysql数据库中的数据生成XML格式的订单文件。我希望文件形成如下:

<Ordreimport> 
 <Kunde> 
  <..>
  <Orderline>
    <data>
  </orderline>
  <orderline>
   <data>
  </orderline>
 </kunde>
</ordreimport>

问题是以下代码

    $OrderXML = new SimpleXMLElement('<?xml version="1.0" encoding="ISO-8859-1"?><OrdreImport></OrdreImport>');
While ($kunderad = mysql_fetch_array($HentKunde)) {

    $OrderXML->addChild('Kunde');
    $KundeInfo = $OrderXML->Kunde->addChild('KundeID',''); //BD60 - Kundekort - Kundenr
    $OrdreHode = $OrderXML->Kunde->addChild('OrdreHode'); //OF14 - Ordrehode
    $OrdreHode= $OrderXML->Kunde->OrdreHode->addChild('OrdreLinje');

    while ($olrader = mysql_fetch_array($HentOrdrelinje)) {         
        $OrdreLinje = $OrderXML->Kunde->OrdreHode->OrdreLinje->addChild('StatusHB'); //se over.
    }   

    Header('Content-type: text/xml');
    echo $OrderXML->asXML();

给出以下结果:

<Ordreimport> 
 <Kunde> 
  <..>
  <Orderline>
    <data>
    <data>
  </orderline>
 </kunde>
</ordreimport>

同样在循环中使用$OrdreHode= $OrderXML->Kunde->OrdreHode->addChild('OrdreLinje');,就像我最初一样,给出相同的结果,除了它还为数据库中的每个附加订单行创建一个空的<orderline>标记。这几乎是正确的,除了所有数据都在第一个<orderline>标签中结束。

php simplexml
1个回答
0
投票

您正在使用整个XML树来添加节点。所以第一个将被选中。请改用当前生成的节点。

循环外的更多写标题和XML。

while ($kunderad = mysql_fetch_array($HentKunde))
{
  $Kunde      = $OrderXML->addChild('Kunde');
  $KundeInfo  = $Kunde->addChild('KundeID', ''); //BD60 - Kundekort - Kundenr
  $OrdreHode  = $Kunde->addChild('OrdreHode'); //OF14 - Ordrehode
  $OrdreLinje = $OrdreHode->addChild('OrdreLinje');

  // execute statement to query related data rows here

  while ($olrader = mysql_fetch_array($HentOrdrelinje))
  {
    $OrdreLinje = $OrdreLinje->addChild('StatusHB'); //se over.
  }
}

Header('Content-type: text/xml');
echo $OrderXML->asXML();

请注意,mysql_函数在较新的PHP版本中是不安全和过时的。请改用mysqli_PDO

您没有显示如何查询该行的结果:

while ($olrader = mysql_fetch_array($HentOrdrelinje))

如果不在外部循环的每次迭代中执行与当前$kunderad相关的语句,则内部循环将不会查询任何新数据集。我假设你确实做过并从最小的例子中删除了这个。

© www.soinside.com 2019 - 2024. All rights reserved.