使用PHP读取XML标记属性时遇到问题

时间:2013-05-27 18:42:52

标签: php xml

鉴于以下内容

<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];

2 个答案:

答案 0 :(得分:1)

这是使用SimpleXMLElement和XPath的code snippet。我添加了一个根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

答案 1 :(得分:0)

好的,拿着格式正确的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];

在行动here中查看。