Daten aus XML File auslesen ?

maxXx

Well-known member
ID: 61650
L
4 Mai 2006
274
17
Hallo,

mal eine Frage, habe von livewatch.de mir ein xml file erstellen lassen, das über eine Url dort erreichbar ist.

Hier die Infos zur XML Schnittstelle von denen:
https://www.livewatch.de/uploads/assets/Livewatch-XML-Gate.pdf

da drin stehen von unsren Servern ein paar Daten (aktiv/inaktiv, online/offline etc.)

sowas sieht aber nun so in etwa aus:

Code:
livewatch>
<servertime>2008-05-02 10:05:56</servertime>
?
<account>
<balance>0.10</balance>
<membership>2</membership>
</account>
?
<serverlist>
?
<server id="439431bab0df6">
<active>1</active>
<status>1</status>


wie kann ich denn nun mir dich wichtigen Daten, also bspw. nur den status 1 (=dann auch gleich umbenennen in "online"), auslesen lassen ? Und kann man das gleich vBulletin variablen gerecht machen ? Es reicht aber auch erstmal, diese Daten alleine in einem php file ausgeben zu lassen.

Kann mir da jemand helfen ? ;)
 
klappt leider alles nicht, [...]
Mit dieser Beschreibung wird dir keiner helfen können :roll:

Sag: Was hast du verwendet ? Was hast du probiert ? Welche Fehler treten auf ? Was ist die Ausgabe ? Was ist die gewünschte Ausgabe ? Welche Variablen hast du überprüft ?
 
sry, war irgendwie nicht ganz klar ;)

Also hab schon was hinbekommen, er gibt mir nun auf ner php seite alles nacheinander aus. oHne diese XML Tags und so.

Ich will aber nur bspw. das erste <status></status> aus dem file auslesen. Es gbt es aber 3 oder 4 Mal. Ist das ein Problem ?

Das hier ist also der Code, den ich für die php verwende:

Code:
<?php

function startElement($parser, $element_name, $element_attribute) {
global $ausgabe;
//Umwandeln in Kleinbuchstaben
$element_name = strtolower($element_name);
//Überprüfung des Elementnames
if ($element_name=="status") {
$ausgabe .= "<h3>Inhalt</h3><p>";
}
}
function endElement($parser, $element_name) {
global $ausgabe;
// in Kleinbuchstaben umwandeln
$element_name = strtolower($element_name);
// Überprüfung des Names eines Elementes
if ($element_name=="status") {
$ausgabe .= "</p>";
}
}
function cdata($parser, $element_status) {
global $ausgabe;
// Der normale Text wird an $ausgabe angehängt
$ausgabe .= $element_status;
}
$xmlFile = file("MEINFILE.XML");
$parser = xml_parser_create();
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "cdata");

foreach($xmlFile as $elem)
{
xml_parse($parser, $elem);
}
xml_parser_free($parser);

echo $ausgabe;
?>
pls help =)
 
Zuletzt bearbeitet von einem Moderator:
Ist SimpleXML zu kompliziert oder was geht nicht?

PHP:
$xml = simplexml_load_file('https://xml.livewatch.de/...');
foreach($xml->serverlist AS $server) {
   echo $server->attributes()->id.': '.$server->status;
}
 
sorry, des ich mich so spät melde, war im vollstress.

hab den Code nun mal ausprobiert, ZeroCCC, da gibt er mir nix aus, außer ein ":", danach nichts mehr :-?
 
ich wusste, dass diese Frage kommt, aber kein Problem

natürlich, die ist korrekt ;)

bitte helft mir noch =)

kann keiner helfen ?
 
Zuletzt bearbeitet von einem Moderator:
Was für eine PHP-Version ist vorhanden? Wenn kleiner als 5.1 dann muss die URL encodiert werden.

Als Erweiterung zu ZeroCCCs Code.
 
Zuletzt bearbeitet:
also auf dem server ists php4

wa sgenau heißt encodiert ? Kann den Code jemand dementsprechend umeditieren ?
 
Steht doch groß im Hinweis:

Hinweis: Libxml 2 demaskiert den URI, wollen Sie also zum Beispiel b&c als Wert für den URI Parameter a verwenden, müssen Sie die Funktion wie folgt aufrufen: simplexml_load_file(rawurlencode('https://example.com/?a=' . urlencode('b&c'))). Seit PHP 5.1.0 wird Ihnen dieser Schritt von PHP abgenommen.

EDIT: Ups, ich hatte grad einen Denkfehler.
 
sorry, aber d.h. für mich ?

mein akteller code:

Code:
<?
	
$xml = simplexml_load_file('https://xml.livewatch.de/remote/serverStatusXML?xxxxxxx');
foreach($xml->serverlist AS $server) {
   echo $server->attributes()->id.': '.$server->status;
} 
?>
 
So sollte es hinhauen:

PHP:
<?
$xml = simplexml_load_file('https://xml.livewatch.de/remote/serverStatusXML?xxxxxxx');
foreach($xml->serverlist->server AS $server) {
   echo $server->attributes()->id.': '.$server->status;
} 
?>
 
hi,

vielen Dank..also habs gerade nachgesehen, haben doch PHP Version 5.2.0 !

ok, mit dem COde von Zero zeigt er wieder was an. Er zeigt das gewünschte an "Status". Nur vorher gibt er noch so 15 Zeichenketten aus:

439431bab0df6: 1438afb942fdbd: 1480f2defd6c88: 1439432029490e: 143a03b329a5e5: 143a03bbab31a4: 14443db4c15b10: 1480cb57abe799: 1480f2e59afc81: 1480f2e9b9aff9: 1482d454527c15: 1


Die 1 ist das, was ich eigentlich will ;)