whine: XML in for-Schleife ausgeben

Liebe Forumsgemeinde,

ich lese mit PHP  eine XML Datei in eine Tabelle aus:

  
...  
  
$xml = simplexml_load_file($filename);  
  
...  
  
<tr>  
 <td>Zeit></td>  
 <td><? echo $xml->Messung->Time ?></td>  
</tr>  
<tr>  
 <td>CH1: </td>  
 <td><? echo $xml->Messung->Ch1 ?></td>  
</tr>  
<tr>  
 <td>CH2: </td>  
 <td><? echo $xml->Messung->Ch2 ?></td>  
</tr>  
...  

Nun folgen noch sehr viele "Ch"s und es bietet sich eine for-Schleife an:

  
...  
<?  
  
for ($i=0; $i < $anzahl; $i++) {  
 echo "<td>CH".$i.": </td>";  
 echo "<td>";  
 echo $xml->Messung->Ch.$i ;  
 echo "</td>";  
}?>  
  
</td>  
...  

Leider konkaterniere ich die Variablen nicht richtig, weil ich als Ausgabe
012345678910... bekomme. Wie verbinde ich mein $i mit $xml->Messung->Ch ?

  1. echo $begrüßung;

    ich lese mit PHP  eine XML Datei in eine Tabelle aus:

    Die Tabelle ist für dein Problem irrelevant.

    [gekürzt]

    $xml = simplexml_load_file($filename);
    echo $xml->Messung->Ch1;
    echo $xml->Messung->Ch2;
    Nun folgen noch sehr viele "Ch"s und es bietet sich eine for-Schleife an:

    Eigentlich bietet es sich an, die XML-Datei zu optimieren und gleiche Dinge gleich zu benennen. Beispielsweise so:

    <Messung>  
      <Ch nr="1">...</Ch>  
      <Ch nr="2">...</Ch>  
    </Messung>
    

    Dann kannst du einfacher darauf zugreifen und musst nicht mit variablen Variablen rumhantieren:

    for ($i = 0; $i < $anzahl; $i++) {  
      echo "CH$i:";  
      echo $xml->Messung->{"Ch$i"};  
    }
    

    echo $xml->Messung->Ch.$i ;
    Leider konkaterniere ich die Variablen nicht richtig, [...]

    Doch, genau das machst du. Stattdessen möchtest du aber den Variablen_namen_ zusammensetzen.

    <? echo $xml->Messung->Ch2 ?>

    Die Kurzform <? zusammen mit echo lässt sich als <?= notieren. Die Kurzform zu verwenden ist jedoch problematisch, weil die nicht überall eingeschaltet ist. Sie kollidiert beispielsweise mit dem XML-Start <?xml, was ein Grund für die Abschaltung von short_open_tag ist.

    echo "$verabschiedung $name";

    1. Danke dedlfix,,

      Eigentlich bietet es sich an, die XML-Datei zu optimieren und gleiche Dinge gleich zu benennen. Beispielsweise so:

      [...]

      Dann kannst du einfacher darauf zugreifen und musst nicht mit variablen Variablen rumhantieren:

      Leider habe ich keinen Einfluß auf die Struktur der XML-Datei (kommt vom Fremdsystem).

      for ($i = 0; $i < $anzahl; $i++) {

      echo "CH$i:";
        echo $xml->Messung->{"Ch$i"};
      }

      
      >   
        
      Das liefert leider keine Ausgabe. Auch keinen Fehler mit error\_reporting(E\_ALL);  
      Was mache ich falsch?  
        
      
      >   
      > Die Kurzform <? zusammen mit echo lässt sich als <?= notieren. Die Kurzform zu verwenden ist jedoch problematisch, weil die nicht überall eingeschaltet ist. Sie kollidiert beispielsweise mit dem XML-Start <?xml, was ein Grund für die Abschaltung von short\_open\_tag ist.  
      >   
        
      Interessant, ich werde mich mal belesen.  
        
      Gruß  
      whine
      
      1. echo $begrüßung;

        Leider habe ich keinen Einfluß auf die Struktur der XML-Datei (kommt vom Fremdsystem).

        for ($i = 0; $i < $anzahl; $i++) {

        echo "CH$i:";
          echo $xml->Messung->{"Ch$i"};
        }

        
        > >   
        >   
        > Das liefert leider keine Ausgabe. Auch keinen Fehler mit error\_reporting(E\_ALL);  
        > Was mache ich falsch?  
          
        Vermutlich schreibst du irgendetwas nicht richtig. SimpleXML arbeitet viel mit "Magie" (in Form der [SPL](http://www.php.net/manual/en/book.spl.php) und einigen [PHP5-OOP](http://www.php.net/manual/en/language.oop5.php)-Features). Das sieht nach außen hin wie einfaches PHP aus, ist es aber nicht. Das wird der Grund sein, warum das error\_reporting nicht anschlägt.  
          
        ~~~php
        $x = simplexml_load_string('<root>  
          <Messung>  
            <Ch1>42</Ch1>  
            <Ch2>23</Ch2>  
          </Messung>  
        </root>');  
          
        $n = 2;  
        var_dump($x->Messung->{"CH$n"});  
        echo $x->Messung->{"CH$n"};
        

        liefert bei mir

        object(SimpleXMLElement)#4 (0) {
        }

        Die Ausgabe des echo sieht man nicht. Wenn du genau hinsiehst, habe ich hier einen Tippfehler eingebaut. Wenn ich das CH in Ch ändere, bekomme ich die gewünschte Ausgabe.

        object(SimpleXMLElement)#4 (1) {
          [0]=>
          string(2) "23"
        }
        23

        echo "$verabschiedung $name";