Чтение и запись XML-файла с помощью PHP

У меня есть XML-файл, videos.xml ,

 <?xml version="1.0" encoding="ISO-8859-1" ?> <videos> <video url="videos/Lillebjorn.f4v" desc="Lillebjørn" /> <video url="videos/Storebjorn.f4v" desc="Storebjørn" /> <video url="videos/Pegasus.f4v" desc="Pegasus" /> </videos> 

Мне было интересно, как я могу прочитать файл выше и добавить новый тег <video url = "" desc = "" /> с URL-адресом нового видео и его описанием с помощью PHP, а затем перезаписать текущие videos.xml чтобы он обновлялся с помощью нового тега.

Используя функции DOM PHP, вы можете загружать и манипулировать им.

Кроме того, вы можете изменить его вручную, используя строковые функции, DOM, вероятно, является излишним.

РЕДАКТИРОВАТЬ:

Предполагая, что вы загрузили файл в $xml var:

 $pos = strpos($xml, "</videos>"); if ($pos === false) { $xml = substr($xml,0,$pos)."\t<video url=\"$url\" desc=\"$desc\" />".substr($xml,$pos); } 

Чтобы прочитать и написать только чек

  • file_get_contents
  • file_put_contents

Я категорически не согласен с практикой обработки XML как текста. Не узнайте, как это сделать неправильно, сделайте это с самого начала, и правильный способ сделать это – использовать инструменты обработки DOM:

SimpleXMLElement – как сказано в названии – это просто или DOMDocument, но для этой задачи SimpleXMLElement будет более чем достаточно.

Начать с $ videos = simplexml_load_file ('videos.xml'); Вы можете изменить видеообъект, как описано в документации SimpleXMLElement , а затем записать его обратно в файл XML с помощью file_put_contents ('videos.xml', $ videos-> asXML ());

Не волнуйтесь, SimpleXMLElement в каждом PHP по умолчанию.

SimpleXML не включается по умолчанию при использовании PHP5 на FreeBSD 8. * (при установке через порты в любом случае). Выполните команды ниже как root, чтобы установить их. Один верный способ узнать, установлен ли он, – создать в нем скрипт с phpinfo () и выполнить поиск в вашем браузере для simplexml .

 cd /usr/ports/textproc/php5-simplexml make install clean 

Вероятно, необходимо также перезапустить apache.

Надеюсь, это спасет кого-то от лысых. 😉