chrism4111 Δημοσ. 3 Μαρτίου 2011 Δημοσ. 3 Μαρτίου 2011 Για σας παιδια.... Για ακομη μια φορα ζυτάω την βοηθεια σας ... Λοιπον εξ'αρχης ποσταρω τον κωδικα PHP o οποιος δημιουργει ενα αρχειο XML και το γράφει. ><?php $q=$_GET["q"]; $s=$_GET["s"]; $g=$_GET["g"]; $catal = array(); $catal = array( "name" => $q, "Last_name" => $s, "Age" => $g ); $doc= new DOMDocument(); $doc->formatOutput = true; $r = $doc->createElement("Catalog"); $doc->appendChild($r); $b=$doc->createElement("Persons"); $name = $doc->createElement("Name"); $name->appendChild($doc->createTextNode($catal['name'])); $b->appendChild($name); $Last_Name = $doc->createElement("Last_Name"); $Last_Name->appendChild($doc->createTextNode($catal['Last_name'])); $b->appendChild($Last_Name); $Age = $doc->createElement("Age"); $Age->appendChild($doc->createTextNode($catal['Age'])); $b->appendChild($Age); $r->appendChild($; echo $doc->saveXML(); $doc->save("example.xml"); ?> Και ο κωδικας που περιεχει το HTML και την Ajax που αποστελει τα δεδομενα στην PHP ειναι ο παρακατω : ><html> <head> <script type="text/javascript"> function writeXML(str,lname,age) { var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","createXml.php?q="+str+"&s="+lname+"&g="+age,true); xmlhttp.send(); } </script> <title></title> </head> <body> <form name="ajax" method="POST" action=""> <input type="BUTTON" value="Submit" onclick="writeXML(document.getElementById('va').value,document.getElementById('lname').value,document.getElementById('age').value)" /> <input id="va" type="text" name="dyn" value="" /> <br /> <input id="lname" type="text" name="dyn" value="" /> <br /> <input id="age" type="text" name="dyn" value="" /> </form> <div id="myDiv"></div> </body> </html> Αυτο που θέλω να κανω εγω . ειναι οτι εαν εχω ηδη ενα XML με περιεχόμενο μεσα πως θα μπορεσω να προσθεσω καινουριο περιεχομενο χωρις να χασω το παλιο μου? Ουσιαστικά θελω να φτιάξω έναν πινακα σαν βάση δεδομένων.. Και να κάνω μετά Parsing το xml μεσω Ajax ή PHP... Το θεμα ειναι οτι πρέπει να δημιουργησω μια φόρμα που θα προσθέτε περιεχόμενο στον πινακα XML.
Uberalles_gr Δημοσ. 4 Μαρτίου 2011 Δημοσ. 4 Μαρτίου 2011 Φίλε μου προσωπικά όποτε θέλω να δημιουργήσω ένα xml αρχείο κάνω το εξής: Φτιάχνω το xml μου κάπως έτσι : > $final_xml = "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"; $final_xml .= "<games>\n"; $final_xml .= "<game>\n"; $final_xml .= "<code>1</code>\n"; $final_xml .= "<game_id>123</game_id>\n"; $final_xml .= "<teamA>ΟΜΑΔΑ Α</teamA>\n"; $final_xml .= "<teamB>ΟΜΑΔΑ Β</teamB>\n"; $final_xml .= "<min>10</min>\n"; $final_xml .= "<scoreA>1</scoreA>\n"; $final_xml .= "<scoreB>0</scoreB>\n"; $final_xml .= "</game>\n"; $final_xml .= "</games>"; Δηλαδή δημιουργώ ΟΛΗ την δομή σε μία μεταβλητή. Στην συνέχεια εάν θέλω να το εμφανίσω αρκεί να κάνω echo το $final_xml και αυτό θα μου γυρίσει το xml. Εάν θέλω να το αποθηκεύσω γράφω > $myFile = "myfile.xml"; $fh = fopen($myFile, 'w') or die("can't open file"); fwrite($fh, $final_xml); fclose($fh); Με το fopen μπορείς να κάνεις ακριβώς αυτό που θες. Εγώ χρησιμοποιώ την ιδιότητα w της fopen όπου μου διαγράφει ότι είχα μέσα και το ξανά γράφει. Με το Parsing έχεις πρόβλημα;;
chrism4111 Δημοσ. 4 Μαρτίου 2011 Μέλος Δημοσ. 4 Μαρτίου 2011 Με το Parsing δεν εχω κανενα προβλημα. Αυτο που λες με την fopen ναι μεν κατανοητο αλλα ειναι λιγο χρονοβορο Στην ουσια του λες : οτι εχεις μεσα σε αυτο το XML σβηστο αποθηκευσετο σε μια μεταβλητη,στην μεταβλητη αυτην προσθεσε αλλη μια εγγραφη και μετα ξαναγραψτω .. Δεν λεω πως δεν ειναι ενας τροπος και αυτος αλλα απο αποψη μνημης δεν νομίζω να συμφερει.. Καμια αλλη λυση που να ψαχνει πχ το τελευταιο κλειστο Ellement και να βάζει την εγγραφη πανω απο αυτο...(Ειναι για πτυχιακη το σκηνικο και θέλω κατι πιοοοοο .... πως να το πω πιο ??????? (εκτος και αν δεν υπαρχει κατι πιο.... )) πχ <Persons> <Person> <Name>Christos</Name> </Person> </Persons> ---> Το τελευταιο end Ellement(Δεν ξερω πως λεγετε ετσι μου ηρθε τωρα )
macabre_sunsets Δημοσ. 4 Μαρτίου 2011 Δημοσ. 4 Μαρτίου 2011 Μήπως κάτι τέτοιο βοηθάει; Επίσης, κοίτα και αυτή την function. Μετατρέπει τα XML σε πίνακα και τούμπαλιν. Εαν μετατρέψεις το XML σου σε πίνακα είναι εύκολο και απλό να προσθέσεις ένα ακόμα στοιχείο. Μετά κάνεις μετατροπή από πίνακα σε XML και έτοιμος. Βέβαια μάλλον δεν είναι «κάπως πιο...» αλλά άμα κάνει την δουλειά σου γιατί να μην υπάρχει σαν ιδέα. Εφόσον το προορίζεις για πτυχιακή, δεν νομίζεις πως είναι καλό να εξετάσεις 1-2-3-... διαφορετικά ενδεχόμενα και να διαλέξεις το καλύτερο; Θα σου δώσει και υλικό να γράψεις, πχ/ σύγκριση κομματιών κώδικα - βελτιστοποίηση κώδικα. Εάν σε ενδιαφέρει κάτι τέτοιο δηλαδή.
chrism4111 Δημοσ. 4 Μαρτίου 2011 Μέλος Δημοσ. 4 Μαρτίου 2011 Μήπως κάτι τέτοιο βοηθάει; Προφανως βοηθαει κατι τετοιο και μαλλον θα ειναι αυτο που ψάχνω... Απορια. Στον κωδικα του Link που ποσταρες στην πρωτη γραμμη $sxe = new SimpleXMLElement($xmlstr); στο $xmlstr τι εχει απουηκευτει? Το Path του Xml αρχειου???
macabre_sunsets Δημοσ. 4 Μαρτίου 2011 Δημοσ. 4 Μαρτίου 2011 Πιθανολογώ πως είναι τα περιχεόμενα του XML αρχείου. Κάτι σαν το: >$xml = new SimpleXMLElement("<?xml version=\"1.0\"?><{$root_element_name}></{$root_element_name}>"); Ρίξε και εδώ μια ματιά αν δεν το έχεις δει.
Uberalles_gr Δημοσ. 8 Μαρτίου 2011 Δημοσ. 8 Μαρτίου 2011 Προφανώς, δεν κατάλαβες τι σου λέω και δεν κάνει αυτό που περιγράφεις ο κώδικας που σου έγραψα.. Στην fopen υπάρχουν κάποιες παράμετροι Possible values: * "r" (Read only. Starts at the beginning of the file) * "r+" (Read/Write. Starts at the beginning of the file) * "w" (Write only. Opens and clears the contents of file; or creates a new file if it doesn't exist) * "w+" (Read/Write. Opens and clears the contents of file; or creates a new file if it doesn't exist) * "a" (Write only. Opens and writes to the end of the file or creates a new file if it doesn't exist) * "a+" (Read/Write. Preserves file content by writing to the end of the file) * "x" (Write only. Creates a new file. Returns FALSE and an error if file already exists) * "x+" (Read/Write. Creates a new file. Returns FALSE and an error if file already exists) Επομένως ότι θες να κάνεις μπορείς να το κάνεις. Λύσεις υπάρχουν πολλές, εσύ διαλέγεις ποια σε βολεύει
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.