-3

I've got strange xml file like this http://xxx.pl/tmp/tabela.xml, and I don't know how to convert it into an array. I tried something like this:

<?php
$get = file_get_contents('http://xxx.pl/tmp/tabela.xml');
$arr = simplexml_load_string($get);
$data = $arr -> druzyna;
?>
<table>
    <tr>
        <th>pozycja</th>
        <th>pkt</th>
        <th>mecze</th>
        <th>zwyciestwa</th>
        <th>porazki</th>
        <th>wygrane w domu</th>
        <th>przegrane w domu</th>
        <th>wygrane na wyjezdzie</th>
        <th>przegrane na wyjezdzie </th>
        <th>kosze zdobyte</th>
        <th>kosze stracone</th>
        <th>stosunek zdobytych punktów do straconych punktów</th>
        <th>pelna nazwa klubu</th>
        <th>logo klubu</th>
    </tr>

    <?php foreach($data as $row) : ?>
    <tr>
        <td><?php echo $row->pozycja ?></td>
        <td><?php echo $row->pkt ?></td>
        <td><?php echo $row->mecze ?></td>
        <td><?php echo $row->zwyciestwa ?></td>
        <td><?php echo $row->porazki ?></td>
        <td><?php echo $row->wygrane_dom ?></td>
        <td><?php echo $row->przegrane_dom ?></td>
        <td><?php echo $row->wygrane_wyjazd ?></td>
        <td><?php echo $row->przegrane_wyjazd ?></td>
        <td><?php echo $row->kosze_zdobyte ?></td>
        <td><?php echo $row->kosze_stracone ?></td>
        <td><?php echo $row->stosunek_zdob_strac ?></td>
        <td><?php echo $row->pelna_nazwa ?></td>
        <td><?php echo $row->logo; ?></td>
    </tr>   
    <?php endforeach;?>
</table>

but it's not working.

I read something about json solution, but i don't know how to use it, however I met first time xml format like that.

I think that this topic How to convert xml into array in php? isn't solution of my problem, because i've got another xml file..

Community
  • 1
  • 1
natsukiss
  • 31
  • 5

2 Answers2

0

It seems like a normal xml, please try this

 $url = "http://example.com/tmp/tabela.xml";
 $xml = file_get_contents($url);
 $xml = simplexml_load_string($xml);
 echo '<pre>';
 print_r($xml);
Jamie Rees
  • 7,973
  • 2
  • 45
  • 83
Nouphal.M
  • 6,304
  • 1
  • 17
  • 28
0

simplexml_load_string returns an SimpleXMLElement object. You can query the object (search your data) by using the xpath() function.

Because of how your XML file is set up, the values are set as attributes. So you need to retrieve the attributes before you can read them.

    <?php

    $get = file_get_contents('http://xxx.pl/tmp/tabela.xml');
    $arr = simplexml_load_string($get);
    $data = $arr->xpath('tabela/druzyna');

    ?>
    <table>
        <tr>
            <th>pozycja</th>
            <th>pkt</th>
            <th>mecze</th>
            <th>zwyciestwa</th>
            <th>porazki</th>
            <th>wygrane w domu</th>
            <th>przegrane w domu</th>
            <th>wygrane na wyjezdzie</th>
            <th>przegrane na wyjezdzie </th>
            <th>kosze zdobyte</th>
            <th>kosze stracone</th>
            <th>stosunek zdobytych punktów do straconych punktów</th>
            <th>pelna nazwa klubu</th>
            <th>logo klubu</th>
        </tr>

        <?php foreach($data as $row) : ?>
            <?php
            $row = $row->attributes();
            ?>
            <tr>
                <td><?php echo $row->pozycja ?></td>
                <td><?php echo $row->pkt ?></td>
                <td><?php echo $row->mecze ?></td>
                <td><?php echo $row->zwyciestwa ?></td>
                <td><?php echo $row->porazki ?></td>
                <td><?php echo $row->wygrane_dom ?></td>
                <td><?php echo $row->przegrane_dom ?></td>
                <td><?php echo $row->wygrane_wyjazd ?></td>
                <td><?php echo $row->przegrane_wyjazd ?></td>
                <td><?php echo $row->kosze_zdobyte ?></td>
                <td><?php echo $row->kosze_stracone ?></td>
                <td><?php echo $row->stosunek_zdob_strac ?></td>
                <td><?php echo $row->pelna_nazwa ?></td>
                <td><?php echo $row->logo; ?></td>
            </tr>
        <?php endforeach;?>
    </table>
natsukiss
  • 31
  • 5
moorscode
  • 801
  • 6
  • 13
  • moorscode yours solution is brilliant, but now, how can I separate two tables? and ???? – natsukiss Oct 29 '15 at 14:19
  • Using xpath you can specifically search for items and even attributes like 'runda'. `$data = $arr->xpath('tabela/druzyna/[@runda="Tabela Stosunek"]');` – moorscode Oct 29 '15 at 14:30
  • I'm really appreciate for your help but it's not working... I'm trying another like $data = $arr->xpath('tabela/druzyna/@runda="Tabela Stosunek"'); without "@" etc.... – natsukiss Oct 29 '15 at 14:42
  • Sorry, the attribute is part of the 'tabela' so it must be placed there in the xpath query: `$data = $arr->xpath('tabela[@runda="Tabela Stosunek"]/druzyna');` – moorscode Oct 29 '15 at 14:44
  • I am truly thankful.. Thank you so much.. – natsukiss Oct 29 '15 at 14:48
  • You are very welcome, can you accept the answer for your question? – moorscode Oct 29 '15 at 14:52