2013-02-26 5 views
0

Я использую simplexml_load_string, чтобы загрузить некоторые XML:XPath - массив ошибок преобразования строки

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

Как можно затем получить доступ к cardHolderName (John Smith), используя XPath? Я пробовал:

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

Но значение пусто, и я получаю предупреждение:

Массив для преобразования строки

Тот же результат со всеми этими XPaths:

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

Заранее спасибо.

+0

Каков код, который дает вам это предупреждение? –

+0

@fab Я обновил свой вопрос, чтобы включить код. – Jonathan

+1

Метод xpath() всегда возвращает массив со всеми связанными узлами. Вы не можете использовать xpath с ним, который возвращает ничего, кроме узлов. –

ответ

1

увидеть, если это работает для вас:

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

Он делает, спасибо. Я должен был упомянуть, что я уже справился с этим, но я задавался вопросом, почему он не будет работать с xpath в одиночку. – Jonathan

0

Запрос XPath это не совсем верно, в этом контексте $xml представляет корневой элемент («платеж»), так что вы бы сослаться на имя с

$order->xpath('cardHolderName'); 

Это означает, что AFAIK simplexml имеет менее звездную поддержку XPath. Вы будете делать это намного проще с DOMDocument и DOMXPath вместо этого, который работает так, как вы ожидали.

+0

К сожалению, это была опечатка при передаче кода. Я все равно получаю тот же результат, поэтому я рассмотрю DOMDocument и DOMXpath. – Jonathan

Смежные вопросы