Thema: XML aus einer WEB-Url lesen
-
10. 02. 2013, 16:38 #1
XML aus einer WEB-Url lesen
Hallo erstmal
Folgendes Problem:
Ich muss eine XML abfragen und verarbeiten könnten die nicht lokal auf dem PC liegt.
Teste ich meinen Code mit einem Lokalen file, funktioniert es ohne Probleme.
jQuery Script:
XML Ausgabe vom Server:PHP-Code:$(document).ready(function () {
$.ajax({
type: 'GET',
url: 'http://localhost:1410/?SNO=56789&ASQL=plu%20mec%2010;',
crossDomain: true,
dataType: "xml",
success: parseXml
});
});
function parseXml(xml) {
$(xml).find('dataset').each(function () {
$("#output").append($(this).find('var[key="article.name"]').text() + "<br />");
});
}
Meine Seite bleibt weiß. Ein direktes XML-File (test.xml) gibt der Code hingegen richtig aus.PHP-Code:<document name="screen">
<section name="status">
<dataset>
<var key="organization.number">2919</var>
<var key="organization.name">Testname</var>
<var key="organization.businessdate">09.02.2013</var>
<var key="situation.number">0</var>
<var key="situation.name">Normalbetrieb</var>
<var key="site.number">0</var>
<var key="site.name">Normalbetrieb</var>
<var key="pricelevel.number">1</var>
<var key="pricelevel.name">normal</var>
<var key="terminal.number">0</var>
<var key="terminal.name">webserver</var>
<var key="terminal.status">open</var>
<var key="terminal.tapster">inactive</var>
<var key="waiter.number">1</var>
<var key="waiter.name">Kellner 1</var>
<var key="table.number">5</var>
<var key="table.balance">3.2</var>
<var key="table.sales">3.2</var>
<var key="profile.number">1</var>
<var key="profile.name">Standard</var>
<var key="execution.severity">I</var>
<var key="execution.code">23600003</var>
<var key="execution.message">Mec list.</var>
</dataset>
</section>
<section name="plu.list">
<dataset>
[...]
Gebe ich den obigen Link in einem Browser ein, bekomme ich ebenfalls eine XML Ausgegeben.
Eventuell hat einer von euch eine Idee
-
10. 02. 2013, 16:43 #2
Re: XML aus einer WEB-Url lesen
Aufgrund der Same Origin Policy kannst Du nicht auf Objekte aus anderen Quellen zugriefen. Die Fehlerkonsole hätte Dir sicher einen Hinweis darauf geliefert.

Du benötigst also ein serverseitiges Script, das die Daten für Dich abholt und zur Verfügung stellt. Wenn die geladene Datei und Dein Javascript aus dem selben origin kommen, besteht das Problem nicht mehr.
-
10. 02. 2013, 17:34 #3
Re: XML aus einer WEB-Url lesen
Danke für die Antwort

Meine Fehlerkonsole zeigt folgendes:
Hmm, ich bin selbst auf localhost und der sever ebenso (zumindest jetzt zum testen). Sollte es da dann nicht klappen?Code:XML-Verarbeitungsfehler: Kein Element gefunden Adresse: moz-nullprincipal:{7cb57e29-fc9d-4d93-9a86-c9cc975e9d61} Zeile Nr. 1, Spalte 1: ^
Was ich noch versucht hatte war den Datentyp auf "jsonp" zu setzen, da dort wohl domainübergreifende Abfragen möglich sind.
Nur dann bekomme ich folgendes:
Das Tolle ist: ich sehe in der Fehlermeldung meine XML Daten -.- Nur verarbeiten is nicht..Code:SyntaxError: syntax error <document name="screen"><section name="status"><dataset><var[...]
-
10. 02. 2013, 21:15 #4
Re: XML aus einer WEB-Url lesen
jsonp ist kompletter Unsinn, das ist ein völlig anderes Dateiformat.
Warum das mit dem XML nicht funktioniert hat noch einen anderen Grund, du schickst einen komplett falschen Header. Standardmäßig gibt ein PHP-Script immer text/html als Datentyp der Ausgabe an. Die gewählte Ajax-Implementierung erwartet jedoch text/xml oder application/xml und verwirft alles, wo der Server behauptet es hätte einen anderen Datentyp. Dabei ist es irrelevant welche Daten es tatsächlich enthält, die Angabe des Servers hat Präzedenz.
Darüber hinaus ist das so kein valides XML, Google hilft dir dabei raus zu finden warum nicht.
-
10. 02. 2013, 21:20 #5
Re: XML aus einer WEB-Url lesen
Danke ebenfalls für die Erklärung

Kann ich das "so einfach" also vergessen?
Serverseitig habe ich keinen Einfluss. Dieser schickt seine "XML" immer so.
Das diese nicht unbedingt "konform" ist, ist klar. Leider kann ich da nichts machen.
-
10. 02. 2013, 23:45 #6
Re: XML aus einer WEB-Url lesen
Das hängt (neben den von Exterminans genannten Faktoren) davon ab, ob der URI deiner Seite und der URI des nachzuladenden XML-Dokuments der Same-Origin-Policy genügen. Zum Origin zählt insbesondere auch die Port-Nummer, URIs mit abweichender Port-Angabe im Authority-Teil verursachen ebenso Cross-Origin-Probleme wie URIs mit abweichendem Hostnamen.
Nein, aber mutmasslich wirst du nicht umhinkommen, auf deinem Webserver ein Skript (z.B. in PHP) zu betreiben, welches als Reverse-Proxy für das XML-Dokument fungiert, d.h. die Datei vom fremden Webserver anfordert und (mit einer korrekten Content-Type-Angabe im Header) an den Client durchreicht.
Die Aussage ist zwar an sich korrekt, einen Zusammenhang mit dem Problem kann ich jedoch nicht erkennen. Ein XML-Dokument ohne zugeordnete DTD kann niemals valide sein - schliesslich kann es dann auch keiner DTD genügen. Gemäss XML 1.0 ist ein Dokument genau dann valide (http://www.w3.org/TR/REC-xml/#dt-valid)
Ein nicht-validierender XML-Parser erfordert allerdings kein valides Dokument und auch keine zugeordnete DTD. Ein Dokument muss lediglich wohlgeformt gemäss http://www.w3.org/TR/REC-xml/#sec-well-formed sein. Das ist anhand des geposteten Fragments zumindest nicht auszuschliessen - so wäre z.B.[...] if it has an associated document type declaration and if the document complies with the constraints expressed in it.
ein wohlgeformtes XML-Dokument und damit parsebar. Zu beachten ist, dass aufgrund der fehlenden XML-Deklaration die Zeichencodierung extern (bei HTTP über einen Content-Type-Header) mitgeteilt werden muss, sofern nicht UTF-16 mit BOM oder UTF-8 verwendet wird (http://www.w3.org/TR/REC-xml/#charencoding).HTML-Code:<document name="screen"> <section name="status"> <dataset> <var key="organization.number">2919</var> <var key="organization.name">Testname</var> <var key="organization.businessdate">09.02.2013</var> <var key="situation.number">0</var> <var key="situation.name">Normalbetrieb</var> <var key="site.number">0</var> <var key="site.name">Normalbetrieb</var> <var key="pricelevel.number">1</var> <var key="pricelevel.name">normal</var> <var key="terminal.number">0</var> <var key="terminal.name">webserver</var> <var key="terminal.status">open</var> <var key="terminal.tapster">inactive</var> <var key="waiter.number">1</var> <var key="waiter.name">Kellner 1</var> <var key="table.number">5</var> <var key="table.balance">3.2</var> <var key="table.sales">3.2</var> <var key="profile.number">1</var> <var key="profile.name">Standard</var> <var key="execution.severity">I</var> <var key="execution.code">23600003</var> <var key="execution.message">Mec list.</var> </dataset> </section> </document>
-


Zitieren

mehr lesen...







Klage für mehr Transparenz im...
Heute, 14:19 in gulli:news