Устранение неполадок в XPath и PHP - PullRequest
0 голосов
/ 04 июня 2010

Я получаю эту ошибку:

Notice: Trying to get property of non-object in

Относится к: echo $ 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;

Ответы [ 3 ]

2 голосов
/ 04 июня 2010
$xml->registerXPathNamespace('default','SYNCML:SYNCML1.0');
$result = $xml->xpath("/default:SyncML/default:SyncBody");
0 голосов
/ 04 июня 2010

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

<?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 голосов
/ 04 июня 2010

Удалить косую черту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...