如何使用php将xml数据附加到xml文件而不覆盖现有数据? [英] How to append xml data to xml file without overwriting existing data using php?

查看:28
本文介绍了如何使用php将xml数据附加到xml文件而不覆盖现有数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

伙计们,我对 php 和 xml 有点陌生,所以请多多包涵.

我想如何将 xml 数据附加到 xml 文件而不覆盖使用 PHP 的现有数据.

我这里有代码:

writexml.php

'汤姆','年龄' =>'34','薪水' =>10000 美元");$employees [] = 数组('名称' =>'瑞安','年龄' =>'20','薪水' =>2000 美元");$employees [] = 数组('名称' =>'戴夫','年龄' =>'20','薪水' =>2000 美元");$doc = 新的 DOMDocument();$doc->formatOutput = true;$r = $doc->createElement("员工");$doc->appendChild( $r );foreach( $employees 作为 $employee ){$b = $doc->createElement("员工");$name = $doc->createElement( "name" );$name->appendChild($doc->createTextNode( $employee['name'] ));$b->appendChild( $name );$age = $doc->createElement("age");$age->appendChild($doc->createTextNode( $employee['age'] ));$b->appendChild( $age );$salary = $doc->createElement( "salary" );$salary->appendChild($doc->createTextNode( $employee['salary'] ));$b->appendChild($salary);$r->appendChild($b);}echo $doc->saveXML();$doc->save("employees.xml")?>

当我运行此代码时会发生什么,它会删除所有以前的数据.请帮忙.

解决方案

您需要打开现有文档以向其中附加信息,您的上次保存只会覆盖现有文件.

$doc = new DomDocument();$doc->loadXML(file_get_contents('employees.xml'));foreach($doc->getElementsByTagName('employees') as $node){//您当前的 xml 逻辑在这里}

hafedh 更新

$doc = new DomDocument();$doc->formatOutput = true;if($xml = file_get_contents('employees.xml'))$doc->loadXML($xml);$nodelist = $doc->getElementsByTagName('employees');if($nodelist->length === 0){$nodelist = $doc->createElement("员工");$doc->appendChild($nodelist);$nodelist = $doc->getElementsByTagName('employees');}foreach($nodelist as $key => $node){//员工容器$element = $doc->createElement("employee");$employee = $node->appendChild($element);//名称元素$element = $doc->createElement("name");$name = $employee->appendChild($element);$element = $doc->createTextNode('CCC');$name->appendChild($element);//年龄元素$element = $doc->createElement("age");$age = $employee->appendChild($element);$element = $doc->createTextNode('333');$age->appendChild($element);}echo '

'.htmlentities($doc->saveXML());

xml 文件内容

AAA111BBB<age>222</age></employee></employees>

HI Guys, Im kinda new to php and xml so pls bear with me.

I wanna how am I gonna append an xml data to an xml file without overwriting the existing data uisng PHP.

I have here the codes:

writexml.php

<?php 
 $employees = array(); 

 $employees [] = array( 
  'name' => 'Tom', 
  'age' => '34', 
  'salary' => "$10000" 
 ); 
 $employees [] = array( 
  'name' => 'Ryan', 
  'age' => '20', 
  'salary' => "$2000" 
 ); 
 $employees [] = array( 
  'name' => 'Dave', 
  'age' => '20', 
  'salary' => "$2000" 
 ); 

 $doc = new DOMDocument(); 
 $doc->formatOutput = true; 

 $r = $doc->createElement( "employees" ); 
 $doc->appendChild( $r ); 

 foreach( $employees as $employee ) 
 { 
  $b = $doc->createElement( "employee" ); 

  $name = $doc->createElement( "name" ); 
  $name->appendChild( 
   $doc->createTextNode( $employee['name'] ) 
  ); 
  $b->appendChild( $name ); 

  $age = $doc->createElement( "age" ); 
  $age->appendChild( 
   $doc->createTextNode( $employee['age'] ) 
  ); 
  $b->appendChild( $age ); 

  $salary = $doc->createElement( "salary" ); 
  $salary->appendChild( 
   $doc->createTextNode( $employee['salary'] ) 
  ); 
  $b->appendChild( $salary ); 

  $r->appendChild( $b ); 
 } 

 echo $doc->saveXML(); 
 $doc->save("employees.xml") 
?>

What happens when I run this code it removes all previous data. Pls help.

解决方案

You will need to open the existing document to append information to it, your last save will simply overwrite the existing file.

$doc = new DomDocument();
$doc->loadXML(file_get_contents('employees.xml'));
foreach($doc->getElementsByTagName('employees') as $node)
{
  // your current xml logic here
}

Update for hafedh

$doc = new DomDocument();
$doc->formatOutput = true;
if($xml = file_get_contents('employees.xml'))
  $doc->loadXML($xml);
$nodelist = $doc->getElementsByTagName('employees');
if($nodelist->length === 0)
{
  $nodelist = $doc->createElement("employees"); 
  $doc->appendChild($nodelist);
  $nodelist = $doc->getElementsByTagName('employees');
}
foreach($nodelist as $key => $node)
{
  // Employee Container
  $element = $doc->createElement("employee");
  $employee = $node->appendChild($element);
  // Name Element
  $element = $doc->createElement("name");
  $name = $employee->appendChild($element);
  $element = $doc->createTextNode('CCC');
  $name->appendChild($element);
  // Age Element
  $element = $doc->createElement("age");
  $age = $employee->appendChild($element);
  $element = $doc->createTextNode('333');
  $age->appendChild($element);
}

echo '<pre>' . htmlentities($doc->saveXML());

xml file contents

<employees><employee><name>AAA</name><age>111</age></employee><employee><name>BBB</name><age>222</age></employee></employees>

这篇关于如何使用php将xml数据附加到xml文件而不覆盖现有数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆