您好我在网上找到了以下代码,用于创建数据并将数据添加到xml文件中:
public function index()
{
$html = "";
try {
$employees = array();
$employees [] = array(
'name' => 'Albert',
'age' => '34',
'salary' => "$10000"
);
$employees [] = array(
'name' => 'Claud',
'age' => '20',
'salary' => "$2000"
);
$doc = new DOMDocument();
$doc->formatOutput = true;
$r = $doc->documentElement->firstChild;
$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 );
}
$doc->save(".." . DIRECTORY_SEPARATOR . "storage" . DIRECTORY_SEPARATOR . "logs" . DIRECTORY_SEPARATOR . "employees.xml") ;
return response()->json();
}
catch (\Exception $e)
{
return response()->json(
[
"message" => $e->getMessage(),
"status_code" => $e->getCode(),
"data" => []
]);
}
}
这是输出:
<?xml version="1.0"?>
<employees>
<employee>
<name>Albert</name>
<age>34</age>
<salary>$10000</salary>
</employee>
<employee>
<name>Claud</name>
<age>20</age>
<salary>$2000</salary>
</employee>
</employees>
然而,当我再次运行代码时,它会提供相同的输出。我希望将新输出附加到xml文件中的先前数据,以便我改为:
<?xml version="1.0"?>
<employees>
<employee>
<name>Albert</name>
<age>34</age>
<salary>$10000</salary>
</employee>
<employee>
<name>Claud</name>
<age>20</age>
<salary>$2000</salary>
</employee>
<employee>
<name>Albert</name>
<age>34</age>
<salary>$10000</salary>
</employee>
<employee>
<name>Claud</name>
<age>20</age>
<salary>$2000</salary>
</employee>
</employees>
答案 0 :(得分:1)
问题是脚本总是写入同一个文件 - 因此它会覆盖旧文件。
解决方案1:
最简单的方法是在文件名后加一个时间戳,如下所示:
$doc->save(".." . DIRECTORY_SEPARATOR . "storage" . DIRECTORY_SEPARATOR . "logs" . DIRECTORY_SEPARATOR . "employees-".date("Y/m/d - h:m:s").".xml") ;
对于每次运行的脚本,您都会获得一个包含新内容的单独文件。
解决方案2:
要将新数据附加到旧数据,您需要先加载旧文件,然后将其与新内容一起附加。 DOMDocument
没有任何方法或功能可以自动将新内容添加到旧内容中。
所以做完之后
$doc = new DOMDocument();
您可以使用
load现有文件$oldContent = $doc->load(<PATH TO YOUR XML FILE>);
现在您可以合并两者并保存它们。如何合并这两个文件已经详细解释了here。