Я пишу немного CMS в PHP. Все работает хорошо, но я никогда не работал с XML, обычно я использую SQL DB или CSV. Теперь я должен добавить некоторые элементы в XML-лист. У меня есть функция, полностью перезаписывающая файл. Я хотел бы добавить данные.
Это функция "write"
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. Я могу использовать функцию "читать", изнутри "писать", поэтому я могу читать содержимое, один элемент во времени (с помощью 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);
Это действительно так.