【问题标题】:Trying to pull XML file from URL, and then pulling in attributes contained inside a tag尝试从 URL 中提取 XML 文件,然后提取标签中包含的属性
【发布时间】:2013-04-24 15:25:12
【问题描述】:

我正在尝试从托管在远程服务器上的实时 XML 文档中提取数据。我正在尝试使用 PHP 来做到这一点。

XML文件的布局是这样的:

<carparkData>
<Northwest>
<carpark name="PARNELL" spaces="51"></carpark>
<carpark name="ILAC" spaces=" "></carpark>
<carpark name="JERVIS" spaces="616"></carpark>
<carpark name="ARNOTTS" spaces="170"></carpark>
</Northwest>
<Northeast>
<carpark name="MARLBORO" spaces="185"></carpark>
<carpark name="ABBEY" spaces="97"></carpark>
</Northeast>
<Southwest>
<carpark name="THOMASST" spaces="193"></carpark>
<carpark name="C/CHURCH" spaces="51"></carpark>
</Southwest>
<Southeast>
<carpark name="SETANTA" spaces=" "></carpark>
<carpark name="DAWSON" spaces="113"></carpark>
<carpark name="TRINITY" spaces="178"></carpark>
<carpark name="GREENRCS" spaces="446"></carpark>
<carpark name="DRURY" spaces="562"></carpark>
<carpark name="B/THOMAS" spaces="168"></carpark>
</Southeast>
</carparkData>

我尝试使用 PHP 首先拉取数据,然后创建一个循环来捕获 &lt;carpark&gt; 标签中包含的属性:

<?php

$data = simplexml_load_file('http://www.dublincity.ie/dublintraffic/cpdata.xml.');

foreach ($data->carpark[0]->attributes() as $a => $b) 
{
        echo $a,'="',$b,"\"\n";
}

【问题讨论】:

  • 试试foreach($data-&gt;Northwest-&gt;carpark as $b) { 然后看看$b的属性

标签: php xml parsing


【解决方案1】:

到目前为止,您还没有遍历 carparks。这可能会为您指明正确的方向:

$data = simplexml_load_file('http://www.dublincity.ie/dublintraffic/cpdata.xml');

if($sectors = $data->children()){
    foreach($sectors as $sector){
        echo '<h1>'.$sector->getName().'</h1>';
        if($carparks = $sector->children()){
            foreach($carparks as $carpark){
                if($attributes = $carpark->attributes()){
                    foreach($attributes as $key=>$value){
                        echo $key.': '.$value.'<br>';
                    }
                    echo '<hr>';
                }
            }
        }
    }
}

【讨论】:

  • 我可能是代码中的这些“倒下的树”,导致发明了一种叫做 XPath 的东西。
【解决方案2】:

使用xpath 直接访问&lt;carpark&gt;-节点:

$xml = simplexml_load_string($x); // assume XML in $x

$carparks = $xml->xpath("//carpark");

foreach ($carparks as $carpark) 
    echo $carpark['name'] . " has " . $carpark['spaces'] . " spaces.<br />";

看到它的工作:http://codepad.viper-7.com/JUB4Jp

【讨论】:

  • 嗨,谢谢你们的贡献。当我在本地 WAMP 服务器中运行 php 时,这两种方法都可以正常工作,但是当我将它们上传到远程网络服务器时,它似乎只是挂起并且没有加载任何数据有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 2021-03-04
  • 2013-07-01
  • 2011-12-14
  • 2019-01-07
相关资源
最近更新 更多