Analizza e modifica il file XML in PHP

Come posso apportre le seguenti modifiche a un file XML in PHP. Praticamente voglio mantenere alcuni elementi e scrivere quegli elementi in un nuovo file XML.

Quindi, so come aprire il nuovo file e prepararlo per la scrittura e quindi aprire il file XML e scorrere iter linea per linea:

$lines = fopen("file.xml", "r"); $new = fopen("newFile.xml", "w"); foreach($lines as $line){ /* operations on each line here */ } 

Non voglio eseguire operazioni su each row, ma su determinati elementi nel file.xml.

Quello che devo fare è per each elemento <doc> (tutto tra <doc> e </doc> ):

  1. echo "<doc>" e interrompi una nuova row in $ new.
  2. scrivi tutto tra <title> e </title> includendo i tag in $ new.
  3. scrivi tutto tra <url> e </url> includendo i tag in $ new.
  4. scrivi tutto tra <abstract> e <abstract> includendo i tag in $ new.
  5. echo "</doc>" e interrompi una nuova row.

e quindi passare al successivo <doc> </doc> .

Apprezzerei molto tutti e qualsiasi aiuto nell'imparare come fare quanto sopra.

Prova a fare qualcosa con la libreria simplexml come nell'esempio seguente:

 $xml = simplexml_load_file("file.xml"); //load file as SimpleXML object $newXml = SimpleXMLElement(); // create new SimpleXML object foreach ($xml->doc as $d){ // change "$xml->doc" to the path to doc in your file $doc = $newXml->addChild("doc"); // add <doc></doc> $doc->addChild("title", (string)$d->title); //add title child within doc $doc->addChild("url", (string)$d->url); //add url child within doc $doc->addChild("abstract", (string)$d->abstract); //add abstract child within doc } $new = fopen("newFile.xml", "w"); // open new file fwrite($new, $newXml->asXML()); //write XML to new file using asXML method fclose($new); // close the new file 

Spero che questo ti aiuti. Puoi trovare la documentazione completa di simplexml qui: http://php.net/simplexml.examples-basic e ci sono molte più domande e risposte concnetworking qui su Stackoverflow: simplexml

In PHP hai due semplici opzioni per lavorare con i file XML. (Ce ne sono altri)

Il primo è già stato segnalato: SimpleXML

La seconda opzione è DOM – Document Object Model

Per rendere la vita ancora più semplice, puoi cercare un file XML con XPath

 $doc = new DOMDocument; $doc->load('myXMLFile.xml'); $xPath = new DOMXPath($doc); // Give me all doc elements inside the XML $docElements = $xPath->query('doc'); foreach ($docElements as $docElement) { // Work your magic here! }