2016-01-19 2 views
2

У нас есть PHP скрипт, который получает данные XML в следующем формате:Как удалить версию XML из PHP: // ввод

<?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); 
?> 
+2

Обратите внимание, что XML-файл может иметь только один корневой элемент, поэтому вы не можете просто добавить его в него. –

+0

Да, я понял, что и использовал str_replace для удаления '' из конца файла, а затем добавьте его вместе с новыми данными xml. –

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^