2013-02-26 30 views
0

我使用simplexml_load_string加载一些XML:使用XPath的XPath - 数组字符串转换错误

$xml = "<payment><cardHolderName><![CDATA[John Smith]]></cardHolderName></payment>"; 
$xml = simplexml_load_string($xml, null, LIBXML_NOCDATA); 

我怎样才能再访问cardHolderName(约翰·史密斯)?我已经试过:

$name = $xml->xpath('/payment/cardHolderName'); 
echo $name; 

但值是空的,我得到一个警告:

阵列字符串转换

同样的结果与所有这些XPath的:

'/payment/cardHolderName' 
'/payment/cardHolderName[1]' 
'/payment/cardHolderName/text()' 
'/payment/cardHolderName[1]/text()' 

在此先感谢。

+0

什么是给你这个警告的代码? – 2013-02-26 10:45:01

+0

@fab我已更新我的问题以包含代码。 – Jonathan 2013-02-26 10:47:39

+1

xpath()方法始终返回一个包含alll匹配节点的数组。你不能使用xpath来返回除节点以外的任何东西。 – 2013-02-26 10:52:20

回答

1

看看这对你的作品:

$name = $order->xpath('/payment/cardHolderName'); 
echo $name[0]; 
+0

它的确如此,谢谢。我应该提到我已经解决了这个问题,但是我想知道为什么它不能单独使用xpath。 – Jonathan 2013-02-26 10:51:32

0

的XPath查询是不完全正确,在这种情况下$xml代表你的根元素(“金”),所以你要提到的名字与

$order->xpath('cardHolderName'); 

也就是说,AFAIK simplexml不如恒星XPath支持。你将会更容易地使用DOMDocumentDOMXPath来代替,它的工作原理与你预期的一样。

+0

对不起,这实际上是传输代码时的错字。我仍然得到相同的结果,所以我会研究DOMDocument和DOMXpath。 – Jonathan 2013-02-26 10:54:54