如何在php中删除xml中的额外标记

时间:2016-11-16 13:57:47

标签: php xml

这里我动态地在xml上生成但是在这里我得到了xml,但在最后一个额外的两个标签来了。

这里是我的xml

<Main>
<Mainrow>
<code>xxxx</code>
<itemname>AAAAA</itemname>
<qty>5.000</qty>
</Mainrow>
</Main>/Mainrow></Main>

我的循环

$stock_txt = '<Main>';
            foreach($results as $key => $datas){
                   $stock_txt .= '<Mainrow>';
                    foreach($datas as $val=>$res){
                        $stock_txt .= '<'.$val.'>'.$res.'</'.$val.'>';
                    }
                        $stock_txt .= '</Mainrow>';
                }
           $stock_txt .= '</Main>';
           $dom->loadXML($stock_txt);
           $dom->save($myFile); // myFile -- my path to save file
           fwrite($fh, $stock_txt);     

如何修剪最后的

/ Mainrow and Main

我试过

  

SUBSTR($ stock_txt,-22);但未能获得XML生成

提前致谢

1 个答案:

答案 0 :(得分:1)

不要将XML创建为文本,使用DOM或XMLWriter方法来创建/添加节点。您将XML字符串加载到DOM并保存。那么为什么不从一开始就使用DOM方法:

sconf

输出:

$results = [
  [
    'code' => 'xxxx',
    'itemname'=> 'AAAAA',
    'qty'=> '5.000'
  ]
];

$document = new DOMDocument();
$main = $document->appendChild($document->createElement('Main'));
foreach ($results as $datas) {
  $row = $main->appendChild($document->createElement('Mainrow'));
  foreach ($datas as $name => $value) {
     $row
       ->appendChild($document->createElement($name))
       ->appendChild($document->createTextNode($value));
  }
}

$document->formatOutput = TRUE;
//$document->save($myFile);
echo $document->saveXml();