使用xpath获取$ variable值时的Array to String转换通知

时间:2013-04-25 15:38:22

标签: xml xpath simplexml php

我试图使用xpath在以下Feed中获取type元素的名称。

<response request="getHierarchyByMarketType" code="001" 
          message="success" debug="">    
<jonny>    
  <class id="5" name="Formula 1" maxRepDate="2012-12-19" maxRepTime="15:03:34">    
    <type id="4558" name="F1 Championship" lastUpdateDate="2012-11-26"
          lastUpdateTime="16:17:33">

这样做我正在使用

$market_name = $wh_xml->xpath('/response/jonny/class/type/@name');

然后使用

<h2>
  <?= $market_name ?>
</h2>

在我看来,而不是它返回我预期的“F1锦标赛”我得到了:

  

数组到字符串转换

注意,但我不确定为什么,我认为xpath会将@name的值作为字符串返回?

2 个答案:

答案 0 :(得分:2)

编辑:使用list()只获取一个值而不是数组:

list($market_name) = $wh_xml->xpath('//type/@name');
echo $market_name;

看到它有效:http://3v4l.org/rNdMo

答案 1 :(得分:2)

simeplexml 中,xpath()方法始终返回array。因此,它不会返回一个字符串,你会看到警告,因为你使用了数组就好像它是一个字符串(输出它)。在PHP中将数组转换为字符串时,您将收到通知,字符串为“Array”

您发现在PHP手册中记录为xpath()方法返回类型:http://php.net/simplexmlelement.xpath以及PHP manual about strings (scroll down/search the following)

  

数组总是转换为字符串“Array”;因此,echoprint本身不能显示数组的内容。要查看单个元素,请使用echo $arr['foo']等结构。 [...]

该规则的唯一例外是,如果您的xpath查询包含错误,则返回值将为FALSE

因此,如果您正在寻找第一个元素,则可以使用list language construct(如果您的xpath查询没有任何语法错误并且至少返回一个节点):

list($market_name) = $wh_xml->xpath('/response/jonny/class/type/@name');
^^^^^^^^^^^^^^^^^^

如果你使用的是PHP 5.4,你也可以直接访问第一个数组值:

$market_name = $wh_xml->xpath('/response/jonny/class/type/@name')[0];
                                                                 ^^^