Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Καλησπέρα παιδιά!Είναι το πρώτο μου 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);
}
};

Έχω κολήσει εδώ και μέρες σε αυτο το σημείο.είμαι ανοιχτός σεοποιαδήποτε ιδέα , είτε να μου δώσει κάποια συμβουλη.

 

Ευχαριστώ

Επεξ/σία από rone
Δημοσ.

προσωπικά θα το έκανα σε 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.

Δημοσ.

ένα δείγμα του 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.

Δημοσ.

Είμαι αρχάριος στην javascript και στην xml.Οπότε δε μπορώ να κρίνω αν είναι ή όχι xml( κατά 100% ) το αρχείο που ανέβασα.Με διάφορους που συζήτησα μου είπαν ότι πρέπει να διορθωθεί. Το θέμα είναι ότι το xml έχει δωθεί απ'τον καθηγητή μου για να κάνω μια ιστοσελίδα , όπου τα δεδομένα θα τα παίρνω απ'το xml και δεν έχω κανένα δικαίωμα να το επεξεργαστώ το αρχείο.

 

Να σημειωθεί πως όταν παρσάρω το δείγμα του xml που έχω ανεβάσει παραπάνω έχοντας αντικαταστήσει το σύμβολο & με & όλα βαίνουν καλώς!

 

Όποτε υποθέτω ότι αν με κάποιο τρόπο καταφέρω και βάλω την συνάρτηση replace μέσα στην downloadUrl ώστε να αντικατασταθεί αντίστοιχα το σύμβολο & με & θα γίνει κανονικά το parse.

 

Edit: Έχω ανεβάσει και μερικούς άλλους κόμβους στο xml.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...