1

我试图使用 xpath 在以下提要中获取类型元素的名称属性。

<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作为字符串返回?

4

2 回答 2

2

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

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

看到它工作:http: //3v4l.org/rNdMo

于 2013-04-25T15:45:04.533 回答
2

simeplexml中,该xpath()方法总是返回一个array. 因此,它不会返回字符串,并且您会看到警告,因为您将数组用作字符串(输出它)。当您在 PHP 中将数组转换为字符串时,您会收到通知,字符串为"Array"

您会发现xpath()在 PHP 手册中记录为 s 方法返回类型:http: //php.net/simplexmlelement.xpath以及关于字符串的 PHP 手册(向下滚动/搜索以下内容)

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

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

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

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];
                                                                 ^^^
于 2013-04-26T11:17:13.113 回答