读取SimpleXML元素属性不起作用

唐纳德鲁西那


我知道这已经回答过了。我整个下午都在阅读所有建议和课程中的SimpleXML文档。但这似乎是一种特殊情况,我真的无法完成这项工作。

只是为了了解上下文,我在通过hook_file_save上传后在Drupal中解析一个GPX文件。

这就是我的NetBeans Debugger关于变量的内容。

NetBeans输出

我试图以人们在上一篇文章中建议的所有方式从字段的属性中读取“纬度”字段。我总是在字段中检索的内容(请参见lat5_1,_2,...)是另一个SimpleXMLElement,里面没有任何东西,只有一个CLASSNAME变量,其值为“ SimpleXMLElement ”。

这是XML文件(GPX文件)的摘录。

XML文件的作用

我真的不知道我在哪里做错了。我以为是因为我隔离了变量(SimpleXMLElement的行为有点奇怪),但事实并非如此。谢谢你的帮助。

我要添加一段代码来调试,并注意观察变量:

$xml = simplexml_load_file($file->uri);
$trkseg = $xml->trk->trkseg;    // OK!
$trkpt = $trkseg->trkpt;        // OK!
$trkpt_c = count($trkpt);       // OK:1289 items

$latlon5 = $trkpt[5]->attributes();  // OK includes @attributes lat lon = 59.158234 5.867209
$latlon6 = $trkpt[6]->attributes();  // OK includes @attributes lat lon = 59.158225 5.867027

foreach ($trkseg->trkpt as $a => $b) {
    $c = $b->attributes()->lat;      // $b OK, $c has just classname.
    echo $a, '="', $b, "\"\n";
}

$lat5_1 = $latlon5['lat'];          // NO: has just CLASSNAME
$lat5_2 = $latlon5->lat;            // NO: has just CLASSNAME
// $lat5_3 = $latlon5->attributes()->{'lat'};
    // NOT COMPUTED! (says trying to get property of non object)

$attribute = $latlon5->attributes();        // NOT COMPUTED!
$lat5_4 = $attribute['lat'];                // NOT COMPUTED!
$lat5_5 = $attribute['lon'];                // NOT COMPUTED!

用于调试的XML摘录

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1/">
<metadata>
<time>2009-04-06T19:08:57Z</time>
</metadata>
  <trk>
    <name>Imported</name>
    <trkseg>
      <trkpt lat="59.158021" lon="5.868032">
        <ele>0</ele>
        <time>2007-05-21T06:00:00Z</time>
      </trkpt>
      <trkpt lat="59.158028" lon="5.868011">
        <ele>0</ele>
        <time>2007-05-21T06:01:53Z</time>
      </trkpt>
[...]
      </trkseg>
  </trk>
</gpx>
罗恩·威廉姆斯

我从SimpleXMLElement :: attributes提取并修改了此代码

<?php
$string = <<<XML
<a>
 <foo name="one" game="lonely">1</foo>
</a>
XML;

$xml = simplexml_load_string($string);
$attribute = $xml->foo[0]->attributes();
print $attribute['name'];
?>

您可能会使用类似:

$attribute = $latlon5->attributes();
print $attribute['lat'];
print $attribute['lon'];

更新:

<?php
$string = <<<XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1/">
<metadata>
<time>2009-04-06T19:08:57Z</time>
</metadata>
  <trk>
    <name>Imported</name>
    <trkseg>
      <trkpt lat="59.158021" lon="5.868032">
        <ele>0</ele>
        <time>2007-05-21T06:00:00Z</time>
      </trkpt>
      <trkpt lat="59.158028" lon="5.868011">
        <ele>0</ele>
        <time>2007-05-21T06:01:53Z</time>
      </trkpt>
      </trkseg>
  </trk>
</gpx>
XML;

$xml = simplexml_load_string($string);
// Single simplified attribute retrieval. 
foreach($xml->trk->trkseg->trkpt[0]->attributes() as $a => $b) {
    echo $a,'="',$b,"\"\n";
}

// Iterative attribute retrieval.

// Iterates over all instances of trkpt
foreach($xml->trk->trkseg->trkpt as $a => $b) {
    // iterates over all trkpt attributes
    foreach($b->attributes() as $a => $b) {
        //Sample lat print
        print '<br />';
        //Sample interative print
        echo $a,'="',$b,"\"\n";
    }
}

?>

这给出了以下输出

lat="59.158021" lon="5.868032"
lat="59.158021"
lon="5.868032"
lat="59.158028"
lon="5.868011" 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

元素的“折叠”属性不起作用?

来自分类Dev

检查html元素的属性不起作用

来自分类Dev

元素的“折叠”属性不起作用?

来自分类Dev

读取()不起作用

来自分类Dev

蓝鸟承诺`promisifyAll`不起作用-无法读取属性'then'

来自分类Dev

Html元素的offsetWidth,scrollWidth,ClientWidth属性不起作用

来自分类Dev

GREYActionBlock返回特定的元素属性不起作用

来自分类Dev

Html元素的offsetWidth,scrollWidth,ClientWidth属性不起作用

来自分类Dev

读取RDF不起作用

来自分类Dev

Vue分隔符在属性中不起作用,但在元素中起作用

来自分类Dev

隐藏div的Javascript代码不起作用(CSS @media规则也不起作用)-'无法读取null的属性样式'

来自分类Dev

onsubmit属性不起作用

来自分类Dev

粗体属性不起作用

来自分类Dev

属性设置不起作用

来自分类Dev

背景属性不起作用

来自分类Dev

AllowHtml属性不起作用

来自分类Dev

属性设置不起作用

来自分类Dev

设置属性不起作用

来自分类Dev

Flash属性不起作用

来自分类Dev

浮动属性不起作用

来自分类Dev

选择属性不起作用

来自分类Dev

“maxLines”属性不起作用

来自分类Dev

宽度属性不起作用

来自分类Dev

如何制作手风琴不起作用,并告诉我如果元素存在,则无法读取未定义的属性“ classList”?

来自分类Dev

与simplexml_load_file()对象的乘法不起作用

来自分类Dev

使用SimpleXML访问XML文件不起作用

来自分类Dev

将两个XAML元素属性绑定到相同的ViewModel属性不起作用

来自分类Dev

灰烬子视图表不起作用未捕获的TypeError:无法读取null的属性'nextSibling'

来自分类Dev

@viewChild不起作用-无法读取未定义的属性nativeElement

Related 相关文章

热门标签

归档