我们有一个PHP脚本,它以下列格式接收XML数据:
<?xml version="1.0" encoding="utf-8"?>
<job>
<job_reference>123</job_reference>
<job_description>Lorem ipsum.</job_description>
<job_title>IT Manager</job_title>
etc...
</job>
脚本当前将其写入文件,替换现有数据。但是我们现在需要它附加到现有数据,但显然我们只能有一个<?xml version="1.0" encoding="utf-8"?>
或XML文件无效。我知道我需要将fopen模式从'w'更改为'a',但是如何从$xml
中删除XML版本行。目前的代码是:
<?php
$xml = file_get_contents('php://input');
$data = $xml;
$file = fopen( 'broadbeantesttest.xml', "w") or exit("Unable to open file!");
// Write $somecontent to our opened file.
if (fwrite($file, $xml) === FALSE) {
echo "Cannot write to file ($file)";
exit;
}
fclose($file);
?>
答案 0 :(得分:2)
您可以使用str_replace()
删除它:
$xmlString = file_get_contents('php://input');
$xmlString = str_replace('<?xml version="1.0" encoding="utf-8"?>', '', $xmlString);
file_put_contents("broadbeantesttest.xml", $xmlString, FILE_APPEND);
答案 1 :(得分:0)
这是我最后的代码,我唯一可能改变的是限制可以包含的工作数量,但我们不会预料到会有大量数据:
<?php
$new = file_get_contents('php://input');
$new = str_replace('<?xml version="1.0" encoding="UTF-8"?>', '', $new);
$filename = "broadbean.xml";
$handle = fopen($filename, "r");
$old = fread($handle, filesize($filename));
$old = str_replace('</jobs>', '', $old);
$jobs = '</jobs>';
$xml = $old . $new . "\r" . $jobs;
$data = $xml;
// Write XML File and update
$file = fopen( 'broadbean.xml', "w") or exit("Unable to open file!");
// Write $somecontent to our opened file.
if (fwrite($file, $xml) === FALSE) {
echo "Cannot write to file ($file)";
exit;
}
fclose($file);
?>
答案 2 :(得分:0)
如果是XML,则应使用XML API来处理它。这将确保您正在阅读和编写有效的XML。它也将照顾字符集/编码。
XML只能有一个文档元素节点。附加请求数据将生成XML片段,而不是XML文档。你需要在顶层有jobs
之类的东西。
XML文件可能如下所示:
<?xml version="1.0" encoding="utf-8"?>
<jobs>
<job>
<job_reference>123</job_reference>
<job_title>IT Manager</job_title>
</job>
</jobs>
请求正文中的XML只包含一个job
,因此它可以是:
<?xml version="1.0" encoding="utf-8"?>
<job>
<job_reference>456</job_reference>
<job_title>Programmer</job_title>
</job>
您需要加载这两个文档并将请求数据中的job
元素导入目标文档。将其附加到jobs
元素并保存。
$storage = new DOMDocument();
$storage->load($fileName);
$input = new DOMDocument();
$input->loadXml(file_get_contents('php://input'));
$storage->documentElement->appendChild(
$storage->importNode($input->documentElement, TRUE)
);
$storage->save($fileName);
答案 3 :(得分:0)
在DOMdocument中转换它并将其返回XML格式;
$temp_xml = new DOMDocument();
$temp_xml->loadXML($your_xml);
$your_xml = $t_xml->saveXML($temp_xml->documentElement);