rone Δημοσ. 31 Μαρτίου 2014 Δημοσ. 31 Μαρτίου 2014 (επεξεργασμένο) Καλησπέρα παιδιά!Είναι το πρώτο μου post στο insomnia.. Παρσάρω ένα xml αρχείο το οποίο είναι δυναμικό και δεν μπορώ να το επεξεργαστώ. Ένας κόμβός του xml περιέχει url όπου περιλαμβάνει τον ειδικό χαρακτήρα ampersant --> ' & ' και έτσι μου προκύπτει error διότι δε μπορεί να γίνει το parsing σωστά. Η λύση είναι οτι ο χαρακτήρας αυτός πρέπει να αντικατασταθεί με : ' & ' . Ένας τρόπος όπου δε μπορεί να εφαρμοστεί στην περίπτωσή μου είναι να αντικαταστήσεις το σύμβολο & με & μέσα απ'το xml και έτσι το παρσαρισμα θα γίνει κανονικά.Το πραγματοποιήσα σε τοπικό xml και έτρεξε κανονικά.Όμως όπως προανέφερα δεν μπορώ να το επεξεργαστώ το δυναμικό xml. O δεύτερος τρόπος είναι με χρήση της συνάρτησης replace. Κάπως έτσι υποθέτω. var link = link.replace( /&/g, "&" ); Παραθέτω παρακάτω το javascript κώδικα downloadUrl("moredata.xml", function(data) { var items = data.documentElement.getElementsByTagName("item"); for (var i = 0; i < items.length; i++) { var description = items[i].getElementsByTagName("description")[0].textContent; var temp = items[i].getElementsByTagName("temp")[0].textContent; var title = items[i].getElementsByTagName("title")[0].textContent; var link = items[i].getElementsByTagName("link")[0].textContent; var windSpeed = items[i].getElementsByTagName("windSpeed")[0].textContent; var dailyRain = items[i].getElementsByTagName("dailyRain")[0].textContent; var latlng = new google.maps.LatLng(parseFloat(items[i].getElementsByTagName("glat")[0].textContent), parseFloat(items[i].getElementsByTagName("glon")[0].textContent)); ένα δείγμα του xml <rss version="2.0"> <channel> <title> Here's is a title </title> <link>http://www.123.gr/</link> <image> <url> http://www.123.gr/456/789images/10.gif </url> <title>123.gr</title> <link>http://www.123.gr/</link> </image> <description> Real time weather in Greece </description> <language>el</language> <pubDate>Mon, 31 Mar 2014 19:52:06 +0300</pubDate> <copyright>123.gr</copyright> <managingEditor>[email protected]</managingEditor> <webMaster>[email protected]</webMaster> <item> <description>Thesaloniki</description> <glat>40.422726139672626</glat> <glon>22.93392777442932</glon> <title>makedonia</title> <temp>60 °C</temp> <dailyRain>0 mm</dailyRain> <windSpeed>3.1 km/hr</windSpeed> <link> http://www.metar.gr/index.php?option=com_jumi&fileid=12&Itemid=73&station=1475 </link> </item> <item> <description>Giannena</description> <glat>39.62209843837158</glat> <glon>20.89027225971222</glon> <title>ipiros</title> <temp>-16.9°C</temp> <dailyRain>0.0 mm</dailyRain> <windSpeed>10 km/hr</windSpeed> <link> http://www.metar.gr/index.php?option=com_jumi&fileid=12&Itemid=73&station=1227 </link> </item> <item> <description>Athina</description> <glat>38.08469095792561</glat> <glon>23.680233657360077</glon> <title>sterea</title> <temp>45°C</temp> <dailyRain>0.0 mm</dailyRain> <windSpeed>97 km/hr</windSpeed> <link> http://www.metar.gr/index.php?option=com_jumi&fileid=12&Itemid=73&station=1009 </link> </item></channel> η συνάρτηση downloadUrl function downloadUrl(url, callback) { var status = -1; var request = createXmlHttpRequest(); if (!request) { return false; } request.onreadystatechange = function() { if (request.readyState == 4) { try { status = request.status; } catch (e) { // Usually indicates request timed out in FF. } if (status == 200) { callback(request.responseXML, request.status); request.onreadystatechange = function() {}; } } } request.open('GET', url, true); try { request.send(null); } catch (e) { changeStatus(e); } }; Έχω κολήσει εδώ και μέρες σε αυτο το σημείο.είμαι ανοιχτός σεοποιαδήποτε ιδέα , είτε να μου δώσει κάποια συμβουλη. Ευχαριστώ Επεξ/σία 31 Μαρτίου 2014 από rone
lion2486 Δημοσ. 31 Μαρτίου 2014 Δημοσ. 31 Μαρτίου 2014 προσωπικά θα το έκανα σε php, θα καλούσα δικό μου αρχείο που θα έκανε αυτή τη δουλειά.. κάτι της μορφής (μη δοκιμασμένο) <?php private function downloadFile ($url, $path) { $newfname = $path; $file = fopen ($url, "r"); if ($file) { $newf = fopen ($newfname, "w"); if ($newf) while(!feof($file)) { $buff = fread($file, 1024 * 8 ); preg_replace('/&(?![A-Za-z0-9#]{1,7};)/','&',$buff); fwrite($newf, $buff , 1024 * 8 ); } } if ($file) fclose($file); if ($newf) fclose($newf); } ?> και αν δεν ήθελα να γίνεται συνέχεια θα το κράταγα και θα το ανανέωνα το αρχείο ανα μια ώρα... Edit: αν θες υπάρχει και η urlencode σε php.
geomagas Δημοσ. 31 Μαρτίου 2014 Δημοσ. 31 Μαρτίου 2014 ένα δείγμα του xml <item> <description>Thesaloniki</description> <glat>40.422726139672626</glat> <glon>22.93392777442932</glon> <title>makedonia</title> <temp>60 °C</temp> <dailyRain>0 mm</dailyRain> <windSpeed>3.1 km/hr</windSpeed> <link> http://www.metar.gr/index.php?option=com_jumi&fileid=12&Itemid=73&station=1475 </link> </item> <item> <description>Giannena</description> <glat>39.62209843837158</glat> <glon>20.89027225971222</glon> <title>ipiros</title> <temp>-16.9°C</temp> <dailyRain>0.0 mm</dailyRain> <windSpeed>10 km/hr</windSpeed> <link> http://www.metar.gr/index.php?option=com_jumi&fileid=12&Itemid=73&station=1227 </link> </item> <item> <description>Athina</description> <glat>38.08469095792561</glat> <glon>23.680233657360077</glon> <title>sterea</title> <temp>45°C</temp> <dailyRain>0.0 mm</dailyRain> <windSpeed>97 km/hr</windSpeed> <link> http://www.metar.gr/index.php?option=com_jumi&fileid=12&Itemid=73&station=1009 </link> </item> Αυτό δεν είναι xml.
rone Δημοσ. 31 Μαρτίου 2014 Μέλος Δημοσ. 31 Μαρτίου 2014 Αυτό δεν είναι xml. Είμαι αρχάριος στην javascript και στην xml.Οπότε δε μπορώ να κρίνω αν είναι ή όχι xml( κατά 100% ) το αρχείο που ανέβασα.Με διάφορους που συζήτησα μου είπαν ότι πρέπει να διορθωθεί. Το θέμα είναι ότι το xml έχει δωθεί απ'τον καθηγητή μου για να κάνω μια ιστοσελίδα , όπου τα δεδομένα θα τα παίρνω απ'το xml και δεν έχω κανένα δικαίωμα να το επεξεργαστώ το αρχείο. Να σημειωθεί πως όταν παρσάρω το δείγμα του xml που έχω ανεβάσει παραπάνω έχοντας αντικαταστήσει το σύμβολο & με & όλα βαίνουν καλώς! Όποτε υποθέτω ότι αν με κάποιο τρόπο καταφέρω και βάλω την συνάρτηση replace μέσα στην downloadUrl ώστε να αντικατασταθεί αντίστοιχα το σύμβολο & με & θα γίνει κανονικά το parse. Edit: Έχω ανεβάσει και μερικούς άλλους κόμβους στο xml.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα