用PHP读取XML标记属性时遇到麻烦


Trouble reading XML tag attributes with PHP

给定以下

<data type="new">
     <time>1</time>
     <time>2</time>
</data>
 <data type="old">
      <time>3</time>
      <time>4</time>
 </data

目标是沿着下面的

键入一些东西
   <?php 
    $test = simplexml_load_file('http://....')
    echo $test->data['type="old"']->time[0] //I want this to return 3
   ?>

并得到3的值!我讨厌尝试使用属性,但我仍在寻找解决方案。

谢谢,JTC

我想从

解析的文档
<data type="current observations">
    <time-layout time-coordinate="local">
        <start-valid-time period-name="current">2013-05-27T13:53:00-04:00</start-valid-time>
    </time-layout>
</data>

我尝试了以下操作,但得到了无效表达式警告。

  $weather = simplexml_load_file('http://...');
  $time=$weather->xpath('//data[@type="current observations"]/"time-layout"/"start-valid-   time"');
  echo $time[0];

下面是使用SimpleXMLElement和XPath的代码片段。我已经添加了一个根datas节点,这样XML就可以被解析了,我猜你的格式很好。

<?php
$xml = <<<XML
<datas>
    <data type="new">
        <time>1</time>
        <time>2</time>
    </data>
    <data type="old">
        <time>3</time>
        <time>4</time>
    </data>
</datas>
XML;
$sxe  = new SimpleXMLElement($xml);
$time = $sxe->xpath('//data[@type="old"]/time');
echo $time[0];

输出
3

以格式良好的实际XML文档为例,可以这样做。

$data = $weather->xpath('/data[@type="current observations"]');
$time_layout = $data[0]->xpath('time-layout[@time-coordinate="local"]');
$start_valid_time = $time_layout[0]->xpath('start-valid-time[@period-name="current"]');
echo (string)$start_valid_time[0];