2016-05-24 3 views
1

Я пытаюсь загрузить XML из строки, но я получаю пустой объект.loading XML from string

<?php 
libxml_use_internal_errors(true); 
$xml = simplexml_load_string($myXMLData); 
if ($xml === false) { 
    echo "Failed loading XML: "; 
    foreach(libxml_get_errors() as $error) { 
     echo "<br>", $error->message; 
    } 
} else { 
    print_r($xml); 
    foreach($xml->{'reference:item'} as $item){ 
     echo $item->{'resource:local-description'}; 
    } 
} 
?> 

$myXMLData and complete Code

Выход: "SimpleXMLElement объекта()". Почему у меня нет ошибок, но объект по-прежнему пуст?

+0

Ну, что же '$ myXMLData' выглядит? – WillardSolutions

+0

http://pastebin.com/r9A43NLk – FlugRost

+0

Как я объяснил в вашем предыдущем вопросе: 1) 'print_r()' не будет печатать ваш XML даже при успехе 2) Ваш текущий синтаксис не работает, потому что он имеет пространство имен XML –

ответ

0

Вы должны прочитать о разборе XML с Пространства имен. Это сильно отличается от обычного XML.

В первой итерации else часть кода может быть такой:

} else 
    foreach($xml->children('reference', true) as $item) 
     if($item->getName() == 'item') 
      foreach($item->children('resource', true) as $desc)  
       if($desc->getName() == 'local-description') 
        echo $desc ."\n"; 

demo

0

Это работает, если вы измените XML вар на:

$myXMLData = ' 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<reference:reference 

в

$myXMLData = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<reference:reference 

Это, вероятно, воспринимает это как пустой теперь далеко

+0

Я использую уже второй. С первой я получаю эту ошибку: «Ошибка загрузки XML: Объявление XML разрешено только в начале документа» – FlugRost