XML in for-Schleife ausgeben
whine
- php
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 ?
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";
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
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";