Xml/XSLT/PHP

tedB

Grünschnabel
Hi,

ich habe ein für mich grosses, aber für euch hoffentlich kleines Problem.

Ich habe folgende XML Datei, die nicht auf meinem Webspace liegt:

http://www.teamwarfare.com/xml/matc...s+Army+Europe+4v4+&pendingdays=2&recentdays=2

habe dazu die passende DTD auf meinem Webspace:

http://www.uwd-clan.de/twl/matchinfo.dtd

Und natürlich auch die passende XSLT:

http://www.uwd-clan.de/twl/matchinfo.xslt


Momentan muss ich die xml Datei immer von Hand ändern und hochladen, was ziemlich zeitaufwendig ist.
Nach nun wochenlangen Googeln, habe ich die verschiedensten Lösungsansätze probiert, da aber mein Wissen auf diesem Gebiet nicht ausreicht, bräuchte ich eure Hilfe.

PHP:
<?php 

$xslproc = xslt_create(); 
$argxml = "http://www.teamwarfare.com/xml/matchinfo.asp?ladder=America%27s+Army+Europe+4v4+&pendingdays=2&recentdays=2"; 
$argxsl = "http://www.uwd-clan.de/twl/matchinfo.xslt"; 
$result = xslt_process($xslproc, $argxml, $argxsl); 
if (!($result)) { 
    echo xslt_error($xslproc); 
} 
echo $result; 
xslt_free($xslproc); 

?>

Diesen Code habe ich hier in diesem Forum gefunden, und in meiner naivität einfach meine Daten reinkopiert.
Dieser ansatz ist denke ich am elegantesten. Das zeigt mir, dass es wohl möglich ist, mit ein paar Zeiclen PHP die XML aufzurufen und das Stylesheet zu verwenden.
Nur leider funktioniert es nicht. :(

Mir tut es Leid folgendes schreiben zu müssen, aber ich bin echt verzweifelt....

Könnte mir jemand das oben gennante so umschreiben, dass es funktioniert?

Ich wäre zutiefst dankbar!

Grüsse ...
 
Code:
Unter UNIX muss man configure mit den Optionen --enable-xslt--with-xslt-sablot ausführen. Die Sablotron Bibliothek sollte irgendwo installiert sein wo sie der Compiler finden kann.

Originaltext kopiert aus dem PHP Manual

das heißt dein provider muss zuerstmal die Sablotron bibliothek installieren, und dann muss PHP neu kompiliert werden....
Der code selbst stimmt aber
 
Laut http://www.uwd-clan.de/infophp.php ist der Sablotron in der Version 0.96 installiert.

Und unter Configure Command finde ich auch die Zeilen: '--enable-xslt' '--with-xslt-sablot'

Ich war natürlich auch nicht untätig, und habe inzwischen sogar mal eine Fehlermeldung erhalten (Mühsam ernährt sich das Eichhörnchen ;)):

Warning: Sablotron error on line 1: XML parser error 4: not well-formed (invalid token) in /www/htdocs/v086088/test/qwert.php on line 6

Zeile 6 in dem Code ist folgende:

PHP:
$result = xslt_process($xslproc, $argxml, $argxsl);

Bezieht sich nun der Fehler auf die XML oder XSLT Datei?


/edit:

Hab mir Cooktop runtergeladen, und die XML Datie validieren lassen. Wie erwartet bekam ich die Nachricht, dass dieses Dokument nicht Valid ist.

Komisch ist nur, dass er semi colons will. Hier mal ein Ausschnitt aus der XML:

PHP:
<?xml version="1.0"?>
<ladder>
	<ladderinfo>
		<name>America's Army Europe 4v4 </name>
		<date>11/26/2003</date>
		<time>12:10:49 PM</time>
	</ladderinfo>
	<results>
		<result historyid="72677" matchid="77313">
			<matchforfeit>False</matchforfeit>
			<rank>5</rank>
			<winner name="Rapid Deployment Force" rank="5">
				<xmllink>http://www.teamwarfare.com/xml/viewteam_v2.asp?team=Rapid+Deployment+Force</xmllink>
				<httplink>http://www.teamwarfare.com/viewteam.asp?team=Rapid+Deployment+Force</httplink>
			</winner>
			<loser name="No Pain No Gain" rank="15">


[...]

In Zeile 2, direct nach <ladder> will er ein Semicolon.
Nachdem ich ein Semicolon eingefügt hab', will er direct dahinter nocheins, und nocheins, und nocheins...etc.

Ist Cooktop zuverlässig?

Da ich ja die XML von einem anderen Server beziehe, kann ich sie auch nicht ändern, falls Cooktop recht hat. :(

Irgendwelche Vorschläge?
 
Zuletzt bearbeitet:
Die erste anweisung sollte auch kein XML befehl sein!
die erste anweisung einer XML datei ist das SGML komando für DOCTYPE

<!DOCTYPE....

ohne DOCTYPE is ein XML file nicht VALID sondern nur WELL-FORMED und damit ein Validierender parser es auswerten kann muss das file auch Valid sein und nicht nur well-formed
 
ahh!

Ja, das macht Sinn

Kennste das, wenn man vor lauter Bäumen den Wald nichtmehr sieht?

Ich habe denen, die die Datei anbieten mal darauf hingewiesen und hoffe natürlich, dass sie es sich zu Herzen nehmen.

Ich danke Dir aufjedenfall für dene Hilfe und verspreche mich ein wenig mehr damit zu beschäftigen, damit ich mir solche Fragen in Zukunft selbst beantworten kann. :)

Oder gibt es eine einfache Möglichkeit die XML trotzdem darstellen zu lassen, quasi den Fehler zu ignorieren?
 
Korrigier den fehler manuell ;-)

lass von deinem PHP script den DOCTYPE header oben dran kopieren..

<?php
$argxml = "http://www.teamwarfare.com/xml/matchinfo.asp?ladder=America%27s+Army+Europe+4v4+&pendingdays=2&recentdays=2";
$argxsl = "http://www.uwd-clan.de/twl/matchinfo.xslt";

$xmlString = @read_file($argxml);
$xmlString .= '<!DOCTYPE ....<was auch immer>....' . $xmlString;
$xh = xslt_create();
$arguments = array('/_xml' => $xmlString);
echo(xslt_process($xh, 'arg:/_xml', $argxsl, NULL, $arguments));
?>

auf die art und weise kannst du den DOCTYPE oben auf die XML datei drauf kopieren, und es dann parsen lassen
 
Was mir unterm überfliegen aufgefallen ist ...

Sollte diese Zeile
Code:
$xmlString .= '<!DOCTYPE ....<was auch immer>....' . $xmlString;
nicht so
Code:
$xmlString = '<!DOCTYPE ....<was auch immer>....' . $xmlString;
lauten? Also praktisch statt ".=" nur ein "="?
 
Zurück