如何将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 你的解决方案很棒,但是现在,我怎样才能分开两个表?$data = $arr->xpath('tabela/druzyna/[@runda="Tabela Stosunek"]');
非常感谢您的帮助,但它不起作用...我正在尝试另一个类似 $data = $arr->xpath('tabela/druzyna/@runda="Tabela Stosunek" ');没有“@”等......
抱歉,该属性是 'tabela' 的一部分,所以它必须放在 xpath 查询中:$data = $arr->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 中的数组? [复制]