Seite 1 von 2
XML Download URL
Verfasst: 15.06.2015 13:18
von kunstlust
Hallo,
in der Hilfe von Spiderbasic ist bei LoadXML folgendes zu lesen Loads a XML tree from an URL or a local file.
Wie bitte ist es möglich, per http ein XML File einzulesen, ich habe es nicht hinbekommen, die Samples sind ja noch recht bescheiden...
Danke für einen Tip
Re: XML Download URL
Verfasst: 15.06.2015 13:51
von Kiffi
eine lokale XML-Datei laden:
Code: Alles auswählen
EnableExplicit
Procedure Loading(Type, Filename.s)
Debug Filename + " loaded"
EndProcedure
Procedure LoadingError(Type, Filename.s)
Debug Filename + ": loading error"
EndProcedure
#XML = 0
; Register the loading event before calling any resource load command
BindEvent(#PB_Event_Loading, @Loading())
BindEvent(#PB_Event_LoadingError, @LoadingError())
LoadXML(#XML, "test.xml")
Wenn Du eine 'remote' XML-Datei laden möchtest, musst Du dementsprechend einen URL einsetzen:
Grüße ... Peter
Re: XML Download URL
Verfasst: 15.06.2015 14:16
von kunstlust
Danke, aber leider gib es bei Laden immer Fehler, es scheint nix mit der XML zu tun zu haben, es passierte bei allen Testdaten so bei mir.
Code: Alles auswählen
EnableExplicit
Procedure Loading(Type, Filename.s)
Debug Filename + " loaded"
EndProcedure
Procedure LoadingError(Type, Filename.s)
Debug Filename + ": loading error"
EndProcedure
#XML = 0
; Register the loading event before calling any resource load command
BindEvent(#PB_Event_Loading, @Loading())
BindEvent(#PB_Event_LoadingError, @LoadingError())
LoadXML(#XML, "http://www.w3schools.com/xml/note.xml")
Re: XML Download URL
Verfasst: 15.06.2015 14:27
von Kiffi
Du kannst aus JavaScript heraus nicht beliebige XMLs von irgendwoher laden. Das muss der Server schon zulassen. Ein Blick in die Console Deines Browsers zeigt:
Abhilfe: Im obigen Fall beispielsweise einen kleinen PHP-Proxy schreiben, von dem Du dann die Daten anforderst. Solltest Du die XMLs von Deinem eigenen Server anfordern, dann in der entsprechenden Konfiguration des Servers ein Access-Control-Allow-Origin hinzufügen.
Grüße ... Peter
Re: XML Download URL
Verfasst: 15.06.2015 14:33
von kunstlust
Danke Peter,
jetzt verstehe ich woher das Problem kommt.
Re: XML Download URL
Verfasst: 15.06.2015 15:02
von kunstlust
Ist es möglich eine WebGadget in einer Datei oder String umzuleiten, um das Cross-Origin zu umgehen?
Re: XML Download URL
Verfasst: 15.06.2015 15:27
von Kiffi
kunstlust hat geschrieben:Ist es möglich eine WebGadget in einer Datei oder String umzuleiten, um das Cross-Origin zu umgehen?
nein, weil das WebGadget den gleichen Beschränkungen unterliegt.
SpiderBasic-Hilfe hat geschrieben:- GetGadgetItemText(): The following constants can be used to get information (only works on the same page domain)
Wie geschrieben: von fremden Domains holt man sich die Daten am besten mit einem Proxy.
Der hier dürfte beispielsweise funktionieren (ungetestet).
Grüße ... Peter
Re: XML Download URL
Verfasst: 15.06.2015 15:49
von Kiffi
Kiffi hat geschrieben:Wie geschrieben: von fremden Domains holt man sich die Daten am besten mit einem Proxy. [...].
Das hier reicht in der Regel schon:
Code: Alles auswählen
<?PHP
$url = $_GET['url'];
$xml = simplexml_load_file($url);
echo $xml->asXML();
?>
Abspeichern unter proxy.php und aufrufen mit:
Code: Alles auswählen
LoadXML(#XML, "http://[DeinWebServer]/proxy.php?url=http://www.w3schools.com/xml/note.xml")
Wichtig: Das klappt nur mit einem auf den WebServer exportierten SpiderBasic-Projekt. Direkt aus dem Editor aufgerufen funktioniert es nicht, weil der interne WebServer (mongoose) nicht für PHP freigeschaltet ist (warum auch immer).
Grüße ... Peter
Re: XML Download URL
Verfasst: 15.06.2015 15:53
von kunstlust
1000 Dank für deine Hilfe Peter

Re: XML Download URL
Verfasst: 15.06.2015 17:34
von kunstlust
Kannst du mir noch sagen warum das Beispiel CreateXML() aus der Hilfe nicht geht?
Code: Alles auswählen
; Create xml tree
xml = CreateXML(#PB_Any)
mainNode = CreateXMLNode(RootXMLNode(xml), "Zoo")
; Create first xml node (in main node)
item = CreateXMLNode(mainNode, "Animal")
SetXMLAttribute(item, "id", "1")
SetXMLNodeText(item, "Elephant")
; Create second xml node (in main node)
item = CreateXMLNode(mainNode, "Animal")
SetXMLAttribute(item, "id", "2")
SetXMLNodeText(item, "Tiger")
; Display the xml
Debug ComposeXML(x