Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
1
Προγραμματισμός Εφαρμογών Διαδικτύου
Προγραμματισμός Εφαρμογών Διαδικτύου Ενότητα 8: XML & PHP Φώτης Κόκκορας, Καθηγητής Εφαρμογών, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας
2
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.
3
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
4
Προγραμματισμός Εφαρμογών Διαδικτύου
Σκοποί ενότητας Να αναφέρει τις χρήσεις XML και PHP. Να περιγράφει τη διαδικασία ελέγχου λαθών κατά το φόρτωμα XML δεδομένων. Να χειρίζεται XML data files μέσω PHP5. Προγραμματισμός Εφαρμογών Διαδικτύου
5
Προγραμματισμός Εφαρμογών Διαδικτύου
Περιεχόμενα ενότητας XML και PHP. Χειρισμός XML σε PHP5. Έλεγχος λαθών κατά το φόρτωμα XML. Δημιουργία XML output από PHP. Προγραμματισμός Εφαρμογών Διαδικτύου
6
Προγραμματισμός Εφαρμογών Διαδικτύου
XML και PHP Η χρήση XML δεδομένων με PHP είναι εφικτή μέσω κατάλληλου parser. Οι απλούστερες λύσεις (π.χ. SimpleXML): παρέχουν πρόσβαση στα XML στοιχεία του εγγράφου μπορούν να ελέγξουν αν το έγγραφο είναι συντακτικά σωστό (well-formed) συνήθως δεν ελέγχουν αν η δομή είναι σωστή (βάσει κάποιου DTD ή XML Schema) συνήθως δεν υποστηρίζουν namespaces Οι σύνθετες λύσεις (π.χ. μέσω του DOM API) είναι περισσότερο ολοκληρωμένες, επιτρέπουν πιο πολύπλοκους χειρισμούς και κατά βάση απαιτούν περισσότερο κώδικα. Παραδοσιακά τα XML δεδομένα είναι σε κωδικοποίηση UTF-8. Ελέγξτε τη συμβατότητα των δεδομένων σας και της XML βιβλιοθήκης που θα χρησιμοποιήσετε. Πιθανώς να χρειαστούν μετατροπές (μέσω ειδικών συναρτήσεων). Τα επόμενα βασίζονται στη βιβλιοθήκη SimpleXML που έρχεται ενεργοποιημένη by default στην έκδοση 5, της PHP. Παρέχει ένα απλό και εύκολο στη χρήση σύνολο συναρτήσεων για την μετατροπή ενός XML αρχείου σε ένα αντικείμενο που μπορούμε να επεξεργαστούμε με σχετικά απλές τεχνικές χειρισμού πινάκων (array iterators). Προγραμματισμός Εφαρμογών Διαδικτύου 6
7
Προγραμματισμός Εφαρμογών Διαδικτύου
Χειρισμός XML σε PHP 5 (1) Έστω ένα αρχείο data.xml με το ακόλουθο XML περιεχόμενο: <?xml version="1.0" encoding="UTF-8"?> <news> <story category="horror" importance="urgent"> <headline lang="en" date="December 19, 2011">Godzilla Attacks LA!</headline> <headline lang="gr" date="December 19, 2011">Ο Γκοτζίλα επιτέθηκε στο LA!</headline> <description>Τhe monster attacked harbors along the California coast.</description> </story> <story> <headline date="December 14, 2011">Bigfoot Spotted at M.I.T. Dining Area.</headline> <description>The beast was seen in the dining area on Tuesday.</description> </news> Μπορούμε να διαβάσουμε XML δεδομένα από αρχείο (με ανάθεση σε αντικείμενο): <?php if (file_exists('data.xml')) { $xmlData = simplexml_load_file('data.xml'); print_r($xmlData); //τυπώνει πίνακα με μορφοποίηση } else { exit('Failed to open data.xml.'); } ?> Αν τα δεδομένα είναι ήδη σε μεταβλητή $str: simplexml_load_string($str) Προγραμματισμός Εφαρμογών Διαδικτύου 7
8
Προγραμματισμός Εφαρμογών Διαδικτύου
Output Παραδείγματος SimpleXMLElement Object ( [story] => Array ( [0] => SimpleXMLElement Object ( => Array ( [category] => horror [importance] => urgent ) [headline] => Array ( Στην πραγματικότητα το output δεν είναι και τόσο τακτοποιημένο! SimpleXMLElement Object ( [story] => Array ( [0] => SimpleXMLElement Object ( => Array ( [category] => horror [importance] => urgent ) [headline] => Array ( [0] => Godzilla Attacks LA! [1] => Επίθεση του Γκοτζίλα στο LA! ) [description] => The monster attacked harbors along the California coast. ) [1] => SimpleXMLElement Object ( [headline] => Bigfoot Spotted at M.I.T. Dining Area. [description] => The beast was seen in the dining area on Tuesday. ) ) ) [0] => Godzilla Attacks LA! [1] => Επίθεση του Γκοτζίλα στο LA! ) [description] => Τhe monster attacked harbors along the California coast. ) [1] => SimpleXMLElement Object ( [headline] => Bigfoot Spotted at M.I.T. Dining Area. [description] => The beast was seen in the dining area on Tuesday. ) ) ) Προγραμματισμός Εφαρμογών Διαδικτύου 8
9
Έλεγχος Λαθών κατά το Φόρτωμα XML
...δηλαδή πριν από εντολές τύπου: $xmlData = simplexml_load_file('data.xml'); $xmlData = new SimpleXMLElement('test.xml',0,true); αναμένει αρχείο στην πρώτη παράμετρο όταν η τρίτη είναι true αναμένει string στην πρώτη παράμετρο όταν η τρίτη είναι false ...χρησιμοποιούμε την εντολή: libxml_use_internal_errors(true); Αν έχει αποτύχει η εντολή αρχικοποίησης της παραμέτρου $xmlData, ελέγχουμε τα σφάλματα που τυχόν συνέβησαν ως εξής: if (!$xmlData) { echo "Failed loading XML\n"; foreach(libxml_get_errors() as $error) { //λήψη μηνύματος echo "\t", $error->message; //εκτύπωση μηνύματος } Προγραμματισμός Εφαρμογών Διαδικτύου 9
10
Χειρισμός XML σε PHP 5 (2) (με βάση τα δεδομένα του data.xml)
Εναλλακτική δημιουργία XML αντικειμένου από XML αρχείο: $xmlData = new SimpleXMLElement('test.xml',0,true); Αν στην πρώτη παράμετρο βάλουμε αρχείο τότε στην τρίτη πρέπει να βάλουμε true. Αν στην πρώτη παράμετρο βάλουμε τα XML δεδομένα ως αλφαριθμητικό, τότε δεν χρειάζονται οι άλλες παράμετροι. Παραδείγματα πρόσβασης σε τμήματα του XML δένδρου: Ηeadline πρώτης είδησης (αν δεν πω ρητά ποιος τότε εννοώ το πρώτο headline): $xmlData->story[0]->headline; //Godzilla Attacks LA! Ισοδύναμα: $xmlData->story[0]->headline[0]; To δεύτερο headline (δείκτης 1) της πρώτης είδησης (δείκτης 0): $xmlData->story[0]->headline[1]; //Επίθεση του Γκοτζίλα στο LA! Η ιδιότητα date του πρώτου headline της δεύτερης είδησης (δείκτης 1): //December 14, 2011 Η ιδιότητα lang του πρώτου headline (ρητά δηλωμένο) της πρώτης είδησης: //en Η ιδιότητα date του δεύτερου headline της πρώτης είδησης ( με " " ): $xmlData->story[0]->headline[1]["date"]; //December 19, 2011 Προγραμματισμός Εφαρμογών Διαδικτύου 10
11
...συνέχεια (παραδείγματα πρόσβασης)
Σάρωση ολόκληρου του XML αντικειμένου και απλή εκτύπωση: foreach($xmlData->story as $story) { //πρόσβαση σε ένα στοιχείο print("<h2>".$story->headline."</h2><br/>"); print($story->description); print("<br/>________________________<br/>"); print($story->headline["date"]."<br/><br/>"); } Προφανώς το output μπορεί να μορφοποιηθεί καλύτερα π.χ. με CSS ή ακόμη καλύτερα με χρήση XML και XSL/XSLT Έξοδος παραπάνω κώδικα: EN: Godzilla Attacks LA! GR: Επίθεση του Γκοτζίλα στο LA! The monster attacked harbors along the California coast. ________________________ December 19, 2011 EN: Bigfoot Spotted at M.I.T. Dining Area. GR: The beast was seen in the dining area on Tuesday. ________________________ December 14, 2011 Προγραμματισμός Εφαρμογών Διαδικτύου 11
12
Χειρισμός XML σε PHP 5 (3) (με βάση τα δεδομένα του data.xml)
Εκτέλεση XPath ερωτήσεων σε XML data: Μια XPath ερώτηση επιστρέφει ένα πίνακα με τα στοιχεία που βρίσκονται στη θέση που προσδιορίζει το path που δίνεται ως παράμετρος. $headlineText = $xmlData->xpath('/news/story[2]/headline'); echo $headlineText[0]; //θα τυπώσει το: Bigfoot Spotted at... Προσοχή: Οι δείκτες του XPath είναι με βάση το 1. Το $headlineText είναι πίνακας στους οποίους οι δείκτες είναι με βάση το 0. Σάρωση με XPath όλων των ιδιοτήτων (properties) ενός στοιχείου: $result = $xmlData->xpath('/news/story[1]'); foreach($result[0]->attributes() as $a=>$b) { echo $a,'="',$b,'"'; } Το παραπάνω θα τυπώσει: category="horror" importance="urgent" Προγραμματισμός Εφαρμογών Διαδικτύου 12
13
Δημιουργία XML output από PHP
Για αποστολή (με php) XML απάντησης σε http κλήση browser, ξεκινάμε με: <?php header("Content-Type: text/xml; charset=UTF-8"); ?> και στην συνέχεια γράφουμε το υπόλοιπο περιεχόμενο, ανάλογα την εφαρμογή. Πρώτη γραμμή σε XML αρχείο: <?xml version="1.0" encoding="UTF-8"?> Για αλλαγή γραμμής μέσα στο XML αρχείο κάντε echo το: "\r\n" αφορά σε Windows (σε Unix: "\n", σε MacOS: "\r") \r : carriage return \n : line feed Προγραμματισμός Εφαρμογών Διαδικτύου 13
14
Προγραμματισμός Εφαρμογών Διαδικτύου
Διάφορα... online XML Validators Περισσότερα για SimpleXML ... Εναλλακτικά: Χειρισμός XML μέσω του DOM API Καλύτερη λύση για σύνθετα projects. Προγραμματισμός Εφαρμογών Διαδικτύου 14
15
Τέλος Ενότητας
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.