如何将xml文件转换为php数组? [复制]

Posted

技术标签:

【中文标题】如何将xml文件转换为php数组? [复制]【英文标题】:How to convert xml file to php array? [duplicate] 【发布时间】:2016-01-29 16:46:38 【问题描述】:

我有类似http://xxx.pl/tmp/tabela.xml 这样的奇怪xml 文件,我不知道如何将其转换为数组。我尝试过这样的事情:

<?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>

但它不起作用。

我阅读了一些关于json 解决方案的内容,但我不知道如何使用它,但是我第一次遇到xml 这样的格式。

我认为How to convert xml into array in php?这个话题不能解决我的问题,因为我还有另一个xml文件..

【问题讨论】:

【参考方案1】:

simplexml_load_string 返回一个SimpleXMLElement 对象。您可以使用xpath() 函数查询对象(搜索您的数据)。

由于您的 XML 文件的设置方式,这些值被设置为属性。 因此,您需要先检索属性,然后才能读取它们。

    <?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>

【讨论】:

moorscode 你的解决方案很棒,但是现在,我怎样才能分开两个表? ???? 使用 xpath,您可以专门搜索项目甚至属性,例如“runda”。 $data = $arr-&gt;xpath('tabela/druzyna/[@runda="Tabela Stosunek"]'); 非常感谢您的帮助,但它不起作用...我正在尝试另一个类似 $data = $arr->xpath('tabela/druzyna/@runda="Tabela Stosunek" ');没有“@”等...... 抱歉,该属性是 'tabela' 的一部分,所以它必须放在 xpath 查询中:$data = $arr-&gt;xpath('tabela[@runda="Tabela Stosunek"]/druzyna'); 我真的很感激..非常感谢..【参考方案2】:

好像是正常的xml,请试试这个

 $url = "http://example.com/tmp/tabela.xml";
 $xml = file_get_contents($url);
 $xml = simplexml_load_string($xml);
 echo '<pre>';
 print_r($xml);

【讨论】:

以上是关于如何将xml文件转换为php数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将 json 编码的 PHP 数组转换为 Javascript 中的数组? [复制]

在 php 中将 XML 文档转换为数组时,有没有办法将其转换回来并将其保存为属性为元素的 XML 文件?

XML与数组的相互转换

.NET将XML转换成数组问题

怎么把图片文件转成xml文件

如何将 Scala 项目转换为使用 pom.xml 文件? [复制]