2010-09-04 4 views
0

Я пытаюсь загрузить удаленный XML-файл, используя php.Проблема с загрузкой удаленного XML-файла

Это мой код:

$doc = new DOMDocument(); 
$doc->load($this->xml_file); 
$file = $doc->getElementsByTagName('file'); 
$totalFiles = $file->length; 
echo $totalFiles; 

Ссылка удаленного XML файла:

http://localhost/script/index.php?act=xml

Это код в index.php:

$xml = '<?xml version="1.0"?><MultimediaGallery>'; 

$query = mysql_query('SELECT `id`,`image`,`desc` FROM `' 
      .confitem('database','prefix').'table` ORDER BY `id` DESC LIMIT ' 
      .$start.','.$limit); 
while($result = mysql_fetch_array($query)) 
{ 
    $img = unserialize($result['image']); 
    $desc = unserialize($result['desc']); 
    $xml .= '<file type="photo"><thumb>' 
     .settings('site','url').'/'.OPATH_APPFOLDER.'/' 
     .OPATH_UPFOLDER.'/wallpapers/thumbs/'.$img[0].'</thumb><source>' 
     .settings('site','url') 
     .'/'.OPATH_APPFOLDER.'/'.OPATH_UPFOLDER 
     .'/wallpapers/'.$img[0].'</source><description>' 
     .$desc[$_SESSION['languagecode']].'</description></file>'; 
} 

$xml .= '</MultimediaGallery>'; 
header("content-type: text/xml"); 
echo $xml; 

Когда я посещаю этот Ссылка на файл xml прямо в браузере. Он выводит мне XML-файл с этим стилем:

<?xml version="1.0"?><MultimediaGallery><file type="photo"><thumb>http://localhost/script/application/data/wallpapers/thumbs/1116205566_42ce0841ab_s.jpg</thumb><source>http://localhost/script/application/data/wallpapers/1116205566_42ce0841ab_s.jpg</source><description>dfdfdfdf</description></file></MultimediaGallery> 

Когда я выполняю функцию XML, которая использует DOM, чтобы загрузить файл XML, я получаю эту ошибку:

Warning: DOMDocument::load() [domdocument.load]: Extra content at the end of the document in http://localhost/script/index.php , line: 2 in C:\AppServ\www\script\application\libraries\wallpapers\multimedia.class.php on line 46

Почему это происходит?

Update:

Я использовал РОМ, чтобы создать XML вместо:

$xml = new DOMDocument('1.0'); 
$root = $xml->createElement('MultimediaGallery'); 
$xml->appendChild($root); 

$query = mysql_query('SELECT `id`,`image`,`desc` FROM `'.confitem('database','prefix').'backgrounds` ORDER BY `id` DESC LIMIT '.$start.','.$limit); 
while($result = mysql_fetch_array($query)) 
{ 
    $img = unserialize($result['image']); 
    $desc = unserialize($result['desc']); 
    $element = $xml->createElement('file'); 
    $root->appendChild($element); 
    $attr = $xml->createAttribute('type'); 
    $element->appendChild($attr); 
    $attr_text = $xml->createTextNode('photo'); 
    $attr->appendChild($attr_text); 

    $thumb = $xml->createElement('thumb'); 
    $element->appendChild($thumb); 
    $thumb_text = $xml->createTextNode(settings('site','url').'/'.OPATH_APPFOLDER.'/'.OPATH_UPFOLDER.'/wallpapers/thumbs/'.$img[0]); 
    $thumb->appendChild($thumb_text); 

    $source = $xml->createElement('source'); 
    $element->appendChild($source); 
    $source_text = $xml->createTextNode(settings('site','url').'/'.OPATH_APPFOLDER.'/'.OPATH_UPFOLDER.'/wallpapers/'.$img[0]); 
    $source->appendChild($source_text); 

    $description = $xml->createElement('description'); 
    $element->appendChild($description); 
    $description_text = $xml->createTextNode($desc[$_SESSION['languagecode']]); 
    $description->appendChild($description_text); 
} 

header("content-type: text/xml"); 
echo $xml->saveXML(); 

Но она по-прежнему дает мне ту же ошибку. Я заметил кое-что, хотя, я попытался скопировать мой выходной файл xml и сохранить его в файле и прочитать его с помощью парсера dom, и результат был в том, что он читается успешно.

Но когда я пытаюсь разобрать вывод xml файлом php, он выдает ошибку.

+0

Попробуйте обрезать выход? – Robus

+0

Формат XML лучше –

ответ

0

Ваш XML не является корректным. Например, с ним что-то не так.

Старайтесь избегать создания XML путем конкатенации строк, потому что это произойдет. Вы можете использовать DomDocument, вы делаете XML, а также читаете его и манипулируете им.

Удостоверьтесь, что в вашем XML-скрипте нет начального или конечного пробела.

Вы также должны использовать CDATA

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