Я пишу что-то вроде маленькой CMS на PHP. Все работает хорошо, но я никогда не работал с XML, обычно я использую SQL DB или CSV. Теперь я должен добавить некоторые элементы в лист XML. У меня есть функция, которая полностью перезаписывает файл. Я хотел бы добавить данные.
Это функция «запись»
function scrivi() {
if ( isset($_POST["titolo"])) {
$doc = new DOMDocument();
$doc->formatOutput = true;
$r = $doc->createElement( "eventi" );
$doc->appendChild( $r );
$b = $doc->createElement( "evento" );
$titolo = $doc->createElement( "titolo" );
$titolo->appendChild( $doc->createTextNode( $_POST['titolo'] ) );
$b->appendChild( $titolo );
$data = $doc->createElement( "data" );
$data->appendChild( $doc->createTextNode( $_POST['data'] ) );
$b->appendChild( $data );
$desc = $doc->createElement( "desc" );
$desc->appendChild( $doc->createTextNode( $_POST['desc'] ) );
$b->appendChild( $desc );
$r->appendChild( $b );
$doc->save("eventi.xml");
}
}
Это объяснительный XML
<?xml version="1.0"?>
<eventi>
<evento>
<titolo>Festa</titolo>
<data>02/03/1993</data>
<desc>Centro Sociale Asilo Politico presenta 99 posse</desc>
</evento>
<evento>
<titolo>Festona</titolo>
<data>15/08/1996</data>
<desc>Falò alla baia: solite facce, solita feccia</desc>
</evento>
</eventi>
У меня также есть функция, которая, очевидно, читает данные из XML.
Я могу использовать функцию «read» изнутри функции «write», чтобы я мог читать содержимое по одному элементу за раз (с foreach) и вставлять его в очередь элементов для записи ($ b). Это работает, но я не рад этому, я хотел бы просто добавить или хотя бы прочитать все содержимое файла через некоторое время. Я попытался скопировать некоторые фрагменты здесь и там, но я не нашел функции, которую я полностью понимаю, и мне нужно понять.
Надеюсь, я был конкретным,
Извините за плохой английский.
PHP имеет функцию под SimpleXML, которая называется addChild ();
Это будет работать так
$d = new SimpleXMLElement("node");
$add = $d->addChild("evento");
$add->addChild("titolo" , $titolo);
$add->addChild("data" , $data);
$add->addChild("desc" , $desc);
Это действительно так.
Других решений пока нет …