2010-06-04 4 views
0

Я получаю эту ошибку:XPath и PHP устранение неисправностей

Notice: Trying to get property of non-object in 

Применимо к: эхо $ result-> Data;

И этот выход:

Array() 

Справочная Информация

Функция возвращает строку, которая содержит файл XML.

Я хочу получить некоторые данные из двух тегов и разобраться с ними самостоятельно.

Строка данных

$data=" 
<SyncML xmlns='SYNCML:SYNCML1.0'> 
<SyncHdr> 
</SyncHdr> 
<SyncBody> 
    <betameta> 
     WANT 1 
    </betameta> 
    <Add> 
     <Data> 
     WANT 2 
     </Data> 
    </Add> 
</SyncBody> 
</SyncML>"; 

В приведенных выше данных, я хочу значения "ХОТИТЕ 1" и "ХОТЯТ 2"

код до сих пор

$xml = simplexml_load_string($data); 
$result = $xml->xpath("/SyncML/SyncBody"); 
print_r($result); 
echo $result->Data; 

ответ

-1

Единственное решение, которое я могу найти следующее:

<?php 

$data= <<<XML 
<?xml version="1.0" encoding="UTF-8"?> 
<SyncML> 
<SyncHdr> 
</SyncHdr> 
<SyncBody> 
    <betameta> 
     WANT 1 
    </betameta> 
    <Add> 
     <Data> 
     WANT 2 
     </Data> 
    </Add> 
</SyncBody> 
</SyncML> 
XML; 

$xml = simplexml_load_string($data); 
$result = $xml->xpath("/SyncML/SyncBody"); 
print_r($result); 
echo $result; 

есть в любом случае вы можете потерять в Xmlns?

Это выведет:

Array 
(
    [0] => SimpleXMLElement Object 
     (
      [betameta] => 
     WANT 1 

      [Add] => SimpleXMLElement Object 
       (
        [Data] => 
     WANT 2 

       ) 

     ) 

) 
+0

Фантастический! Я измельчу xmlns! Спасибо, Мартин! – Sochin

+0

@Sochin: Я бы не рекомендовал это. Поделитесь с пространством имен, это достаточно просто (см. Ответ Рика). – Tomalak

0

Вынуть конечная косая черта.

+0

Спасибо, сделал это, и теперь я получаю "Array()" – Sochin

+0

Да, пункт доступа 0 в массиве, чтобы получить только результат. –

+0

Я использую: print_r ($ result); Не выводит ли все записи в массиве? – Sochin

2
$xml->registerXPathNamespace('default','SYNCML:SYNCML1.0'); 
$result = $xml->xpath("/default:SyncML/default:SyncBody"); 
+0

+1, намного лучше, чем выбросить пространство имен из источника. – Tomalak