So leggere di PHP, scrivere, e di aggiunta ... ma si può inserire? o rimuovere ultima riga?

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

  •  12-09-2019
  •  | 
  •  

Domanda

Sto cercando di creare un file XML, ma il file XML deve essere avvolto in nodi ... da qui, non è facile da usare accodamento.

Qualsiasi aiuto con questo sarebbe grande !!

Il mio XML si compone di 2 diversi tipi di nodi:

<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>

E ho una pagina di test semplice utilizzando jQuery per inviare i dati (attualmente statici) in un file 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>

... che attualmente lo aggiunge al mio file XML, ma ho bisogno l'inizio / fine nodi.

È stato utile?

Soluzione

txwinger avuto l'idea giusta nel suo commento alla tua domanda. Si consiglia di utilizzare uno dei phps molte librerie di manipolazione XML incorporati per aggiungere il nodo, quindi serializzare e salvarlo come file di testo. In SimpleXML , per esempio:

$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);

Ci sono altre librerie di manipolazione XML che potrebbe soddisfare il vostro compito meglio

Altri suggerimenti

Direi che dipende dalla struttura di voi documento XML. Se il “resto” è prevedibile, si potrebbe tagliare quella parte dal file, aggiungere i nuovi dati e incollare il “resto” di nuovo:

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


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

Se si sta cercando di fare questo il modo rapido e sporco: Se si apre il file in "R +" e si imposta il puntatore a una riga vuota tra l'ultimo elemento e la fine del file, si scriverà nel corso degli elementi di livello principale tag di chiusura, quindi basta aggiungerlo indietro dopo che si scrive il nuovo bambino elemento. Tenete a mente che ho scritto script PHP per tutti di 4 ore, per cui v'è probabilmente un modo migliore, ma questo è il più semplice mi è venuta in mente nella mia carriera di 4 ore.

$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";
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top