Richard: Zugriff auf XML-Daten

Hallo alle,

per Instanz von SimpleXMLElement will ich auf Daten aus einem XML-String zugreifen. Das Objekt wird mit den korrekten Daten gefüllt, var_dump führt zum gewünschten Ergebnis.

Auszug aus XML:

  
<kader>  
    <position name="tor">  
        <spieler>  
            <name>  
                Roman Weidenfeller  
            </name>  
            <preis>  
                6.5  
            </preis>  
            <saison>  
                <spieltag nr="1">  
                    <sbnote>  
                        0  
                    </sbnote>  

Auszug aus PHP:

  
$xml = new SimpleXMLElement($xmlstr);  
  
echo $xml->kader->position['tor']->spieler[0]->name;  

Doch statt der Ausgabe "Roman Weidenfeller" bekomme ich nur eine Notice "Trying to get property of non-object in C:\web\Apache2\htdocs\buli_manager\index.php on line 9"

Was mache ich falsch?

Beste Grüße
Richard

  1. hi,

    Das Objekt wird mit den korrekten Daten gefüllt, var_dump führt zum gewünschten Ergebnis.

    Und die Ausgabe von var_dump sieht wie aus?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo wahsaga,

      Und die Ausgabe von var_dump sieht wie aus?

      So:

      object(SimpleXMLElement)#1 (1) { ["position"]=>  array(4) { [0]=>  object(SimpleXMLElement)#2 (1) { ["spieler"]=>  array(2) { [0]=>  object(SimpleXMLElement)#6 (3) { ["name"]=>  string(48) " Roman Weidenfeller " ["preis"]=>  string(33) " 6.5 " ["saison"]=>  object(SimpleXMLElement)#8 (1) { ["spieltag"]=>  object(SimpleXMLElement)#9 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [1]=>  object(SimpleXMLElement)#7 (3) { ["name"]=>  string(48) " Sascha Kirschstein " ["preis"]=>  string(33) " 2.0 " ["saison"]=>  object(SimpleXMLElement)#10 (1) { ["spieltag"]=>  object(SimpleXMLElement)#11 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } } } [1]=>  object(SimpleXMLElement)#3 (1) { ["spieler"]=>  array(8) { [0]=>  object(SimpleXMLElement)#12 (3) { ["name"]=>  string(47) " Frank Fahrenhorst " ["preis"]=>  string(33) " 1.9 " ["saison"]=>  object(SimpleXMLElement)#20 (1) { ["spieltag"]=>  object(SimpleXMLElement)#21 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [1]=>  object(SimpleXMLElement)#13 (3) { ["name"]=>  string(49) " Christoph Metzelder " ["preis"]=>  string(33) " 4.5 " ["saison"]=>  object(SimpleXMLElement)#22 (1) { ["spieltag"]=>  object(SimpleXMLElement)#23 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [2]=>  object(SimpleXMLElement)#14 (3) { ["name"]=>  string(46) " Mladen Kristajic " ["preis"]=>  string(33) " 3.5 " ["saison"]=>  object(SimpleXMLElement)#24 (1) { ["spieltag"]=>  object(SimpleXMLElement)#25 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [3]=>  object(SimpleXMLElement)#15 (3) { ["name"]=>  string(43) " Clemens Fritz " ["preis"]=>  string(33) " 2.5 " ["saison"]=>  object(SimpleXMLElement)#26 (1) { ["spieltag"]=>  object(SimpleXMLElement)#27 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [4]=>  object(SimpleXMLElement)#16 (3) { ["name"]=>  string(42) " Mathias Abel " ["preis"]=>  string(33) " 1.9 " ["saison"]=>  object(SimpleXMLElement)#28 (1) { ["spieltag"]=>  object(SimpleXMLElement)#29 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [5]=>  object(SimpleXMLElement)#17 (3) { ["name"]=>  string(47) " Steven Cherundolo " ["preis"]=>  string(33) " 2.0 " ["saison"]=>  object(SimpleXMLElement)#30 (1) { ["spieltag"]=>  object(SimpleXMLElement)#31 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [6]=>  object(SimpleXMLElement)#18 (3) { ["name"]=>  string(46) " Christian Pander " ["preis"]=>  string(33) " 0.8 " ["saison"]=>  object(SimpleXMLElement)#32 (1) { ["spieltag"]=>  object(SimpleXMLElement)#33 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [7]=>  object(SimpleXMLElement)#19 (3) { ["name"]=>  string(50) " Peter van der Heyden " ["preis"]=>  string(33) " 1.7 " ["saison"]=>  object(SimpleXMLElement)#34 (1) { ["spieltag"]=>  object(SimpleXMLElement)#35 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } } } [2]=>  object(SimpleXMLElement)#4 (1) { ["spieler"]=>  array(10) { [0]=>  object(SimpleXMLElement)#36 (3) { ["name"]=>  string(49) " Tranquillo Barnetta " ["preis"]=>  string(33) " 6.0 " ["saison"]=>  object(SimpleXMLElement)#46 (1) { ["spieltag"]=>  object(SimpleXMLElement)#47 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [1]=>  object(SimpleXMLElement)#37 (3) { ["name"]=>  string(43) " Frank Baumann " ["preis"]=>  string(33) " 2.3 " ["saison"]=>  object(SimpleXMLElement)#48 (1) { ["spieltag"]=>  object(SimpleXMLElement)#49 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [2]=>  object(SimpleXMLElement)#38 (3) { ["name"]=>  string(43) " Nigel de Jong " ["preis"]=>  string(33) " 2.7 " ["saison"]=>  object(SimpleXMLElement)#50 (1) { ["spieltag"]=>  object(SimpleXMLElement)#51 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [3]=>  object(SimpleXMLElement)#39 (3) { ["name"]=>  string(43) " Tomas Galasek " ["preis"]=>  string(33) " 2.8 " ["saison"]=>  object(SimpleXMLElement)#52 (1) { ["spieltag"]=>  object(SimpleXMLElement)#53 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [4]=>  object(SimpleXMLElement)#40 (3) { ["name"]=>  string(45) " Bernd Schneider " ["preis"]=>  string(33) " 3.5 " ["saison"]=>  object(SimpleXMLElement)#54 (1) { ["spieltag"]=>  object(SimpleXMLElement)#55 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [5]=>  object(SimpleXMLElement)#41 (3) { ["name"]=>  string(41) " Marko Babic " ["preis"]=>  string(33) " 2.8 " ["saison"]=>  object(SimpleXMLElement)#56 (1) { ["spieltag"]=>  object(SimpleXMLElement)#57 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [6]=>  object(SimpleXMLElement)#42 (3) { ["name"]=>  string(44) " Hamit Altintop " ["preis"]=>  string(33) " 2.8 " ["saison"]=>  object(SimpleXMLElement)#58 (1) { ["spieltag"]=>  object(SimpleXMLElement)#59 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [7]=>  object(SimpleXMLElement)#43 (3) { ["name"]=>  string(43) " Ivica Banovic " ["preis"]=>  string(33) " 1.0 " ["saison"]=>  object(SimpleXMLElement)#60 (1) { ["spieltag"]=>  object(SimpleXMLElement)#61 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [8]=>  object(SimpleXMLElement)#44 (3) { ["name"]=>  string(41) " David Degen " ["preis"]=>  string(33) " 1.5 " ["saison"]=>  object(SimpleXMLElement)#62 (1) { ["spieltag"]=>  object(SimpleXMLElement)#63 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [9]=>  object(SimpleXMLElement)#45 (3) { ["name"]=>  string(46) " Marco Engelhardt " ["preis"]=>  string(33) " 1.5 " ["saison"]=>  object(SimpleXMLElement)#64 (1) { ["spieltag"]=>  object(SimpleXMLElement)#65 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } } } [3]=>  object(SimpleXMLElement)#5 (1) { ["spieler"]=>  array(6) { [0]=>  object(SimpleXMLElement)#66 (3) { ["name"]=>  string(43) " Robert Vittek " ["preis"]=>  string(33) " 5.5 " ["saison"]=>  object(SimpleXMLElement)#72 (1) { ["spieltag"]=>  object(SimpleXMLElement)#73 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [1]=>  object(SimpleXMLElement)#67 (3) { ["name"]=>  string(48) " Ioannis Amanatidis " ["preis"]=>  string(33) " 3.5 " ["saison"]=>  object(SimpleXMLElement)#74 (1) { ["spieltag"]=>  object(SimpleXMLElement)#75 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [2]=>  object(SimpleXMLElement)#68 (3) { ["name"]=>  string(47) " Christian Gimenez " ["preis"]=>  string(33) " 1.8 " ["saison"]=>  object(SimpleXMLElement)#76 (1) { ["spieltag"]=>  object(SimpleXMLElement)#77 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [3]=>  object(SimpleXMLElement)#69 (3) { ["name"]=>  string(40) " Mike Hanke " ["preis"]=>  string(33) " 2.8 " ["saison"]=>  object(SimpleXMLElement)#78 (1) { ["spieltag"]=>  object(SimpleXMLElement)#79 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [4]=>  object(SimpleXMLElement)#70 (3) { ["name"]=>  string(44) " Joshua Kennedy " ["preis"]=>  string(33) " 1.0 " ["saison"]=>  object(SimpleXMLElement)#80 (1) { ["spieltag"]=>  object(SimpleXMLElement)#81 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } [5]=>  object(SimpleXMLElement)#71 (3) { ["name"]=>  string(40) " Aaron Hunt " ["preis"]=>  string(33) " 1.2 " ["saison"]=>  object(SimpleXMLElement)#82 (1) { ["spieltag"]=>  object(SimpleXMLElement)#83 (6) { ["sbnote"]=>  string(47) " 0 " ["tore"]=>  array(2) { [0]=>  string(47) " 0 " [1]=>  string(47) " 0 " } ["elftore"]=>  string(47) " 0 " ["gkarte"]=>  string(47) " 0 " ["grkarte"]=>  string(47) " 0 " ["rkarte"]=>  string(47) " 0 " } } } } } } }

      ;)

      Beste Grüße Richard

      1. Hallo Richard.

        Und die Ausgabe von var_dump sieht wie aus?

        So:

        … ist sie unlesbar. Bitte gib vorher ein „<pre>“ aus oder wechsele gleich per header auf text/plain. (Und bei so viel Text lohnt es sich ggf. die Ausgabe in eine Datei zu packen und diese hier zu verlinken.)

        Einen schönen Dienstag noch.

        Gruß, Mathias

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]
  2. echo $begrüßung;

    Auszug aus XML:

    <kader>

    <position name="tor">
            <spieler>
                <name>
                    Roman Weidenfeller
                </name>

    
    >   
    > Auszug aus PHP:  
    > ~~~php
    
    $xml = new SimpleXMLElement($xmlstr);  
    
    > echo $xml->kader->position['tor']->spieler[0]->name;
    
    

    Du möchtest also auf das "position"-Element zugreifen, das als Attribut mit dem Namen "name" den Wert "tor" enthält. Woher weiß SimpleXMLElement, dass du das Attribut "name" meinst, wenn du nur position['tor'] notierst?

    echo "$verabschiedung $name";

    1. Hallo dedlfix,

      Danke, da war ich zu sehr aufs Tor fokussiert. Spätestens beim Versuch, auf einen Abwehrspieler zuzgreifen, hätte ich es wahrscheinlich selbst bemerkt.

      Beste Grüße
      Richard