如何在不使用php覆盖现有数据的情况下将xml数据附加到xml文件中


How to append xml data to xml file without overwriting existing data using php?

嗨,伙计们,我对php和xml有点陌生,所以请耐心等待。

我想知道如何在不使用PHP覆盖现有数据的情况下将xml数据附加到xml文件中。

我这里有代码:

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") 
?>

当我运行此代码时,它会删除所有以前的数据。请帮忙。

您将需要打开现有文档来向其附加信息,您的最后一次保存只会覆盖现有文件。

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

更新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文件内容

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