我试图使用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
的值作为字符串返回?
答案 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”;因此,
echo
和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];
^^^