我在使用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>
标签结尾。
答案 0 :(得分: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
相关的语句,内循环将不查询任何新的数据集。我认为您实际上是这样做的,并从最小的示例中删除了它。