Je sais que la lecture de PHP, écrire et Append ... mais pouvez-vous insérer? ou supprimer la dernière ligne?

StackOverflow https://stackoverflow.com/questions/1110764

  •  12-09-2019
  •  | 
  •  

Question

Je suis en train de créer un fichier XML, mais le fichier XML a besoin d'être enveloppé dans des nœuds ... donc, pas facile à utiliser append.

Toute aide à ce serait génial !!

Mon XML se compose de 2 différents types de nœuds:

<entry id="1_0">
    <title>This is the title</title>
    <description>This is the description...</description>
    <subName>Publishers Name</subName>
    <date>Saturday, June 11th, 2007, 5:46:21 PM</date>
    <BorF>bug</BorF>
</entry>

<vote id="1_0">5</vote>

Et j'ai une simple page de test en utilisant jQuery pour envoyer des données (actuellement statique) à un fichier PHP

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>


<script type="text/javascript" src="jquery-1.3.2.min.js"></script>

<script>

$(function(){


    $("#addVote").click(function() {
        $.ajax({
            type: "POST",
            url: "saveListData.php",
            data: 'url=bugs_features_listdata.xml&listData=\n<vote id="1_2">3</vote>',
            async: false,
            cache: false,
            success: function(data, textStatus) {
                if (window.console) console.log(textStatus);
            },
            complete: function(XMLHttpRequest, textStatus){
                if (window.console) console.log(textStatus);
            }
        });
    });

    $("#addEntry").click(function() {
        $.ajax({
            type: "POST",
            url: "saveListData.php",
            data: 'url=bugs_features_listdata.xml&listData=\n<entry id="1_1">\n\
\t<title>This is the title 1</title>\n\
\t<description>This is the description...</description>\n\
\t<subName>Publishers Name</subName>\n\
\t<date>Saturday, June 11th, 2007, 5:46:21 PM</date>\n\
\t<BorF>bug</BorF>\n\
</entry>',
            async: false,
            cache: false,
            success: function(data, textStatus) {
                if (window.console) console.log(textStatus);
            },
            complete: function(XMLHttpRequest, textStatus){
                if (window.console) console.log(textStatus);
            }
        });
    });


}); 

</script>

</head>

<body>


<a id="addVote" href="#">ADD VOTE</a><br /><br /><a id="addEntry" href="#">ADD ENTRY</a>


</body>
</html>

... qui ajoute actuellement à mon fichier XML, mais je dois le début / fin des nœuds.

Était-ce utile?

La solution

txwinger avait la bonne idée dans son commentaire sur votre question. Vous devez utiliser l'une des nombreuses bibliothèques phps de manipulation XML intégré pour ajouter le nœud, puis sérialisation et l'enregistrer dans un fichier texte. SimpleXML , par exemple:

$xml = simplexml_load_file('test.xml');
$vote = $xml->addChild('vote', '5');
$vote->addAttribute('id','1_0');
$fp = fopen('test.xml', 'w');
fwrite($fp, $xml->asXML());
fclose($fp);

Il y a autres bibliothèques de manipulation XML qui pourraient convenir à votre tâche mieux

Autres conseils

Je dirais que cela dépend de la structure du document XML que vous. Si le « repos » est prévisible, vous pouvez couper cette partie de votre fichier, ajoutez les nouvelles données et coller le dos « repos »:

      ⋮
n-1:     <node>last node</node>
n  :  </root>


      ⋮
n-1:     <node>last node</node>
n  :     <node>new node</node>
n+1:  </root>

Si vous essayez de le faire la façon rapide et sale: Si vous ouvrez le fichier dans « r + » et réglez le pointeur sur une ligne vide entre le dernier élément et la fin du fichier, il écrit sur la balise de fermeture des éléments de niveau racine, donc il suffit d'ajouter à nouveau après écrire le nouvel enfant élément. Gardez à l'esprit que j'ai écrit des scripts php pour tous de 4 heures, donc il y a probablement une meilleure façon, mais cela est que je suis venu le plus simple avec dans ma carrière de 4 heures.

$name = $_POST["name"];
$phone = $_POST["phone"];

$fh = fopen("xml-test-1.xml", "r+");
if (!$fh)
{
    die("Failed to open");
}

fseek($fh, -11, SEEK_END);
fwrite($fh, "<person> \n");
fwrite($fh, "<name>$name</name> \n");
fwrite($fh, "<phone>$phone</phone> \n");
fwrite($fh, "</person> \n");
fwrite($fh, "</people> \n");
fclose($fh);

echo "now look and see if anything was added";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top