Как мне разобрать внешний файл XML (возвращаемый из POST) с php? - PullRequest
0 голосов
/ 04 января 2010

У меня есть простой написанный код (основанный на некоторых учебных пособиях, найденных в Интернете) для анализа и отображения файла XML. Однако я знаю только, как ссылаться на XML-файл, хранящийся на моем сервере, и я хотел бы иметь возможность использовать XML-файл, который мне возвращают из POST.

Прямо сейчас мой код выглядит так:

if( ! $xml = simplexml_load_file('test.xml') )
{
    echo 'unable to load XML file';
}
else
{
    foreach( $xml as $event)
    {
        echo 'Title: ';
        echo "<a href=\"$event->url\">$event->title</a><br />";
        echo 'Description: '.$event->info.'<br />';
        echo '<br />';
    }
} 

Можно ли как-нибудь заменить функцию simpleXML_load_file на такую, которая позволит мне указывать на POST-URL, который возвращает файл XML?

Ответы [ 4 ]

3 голосов
/ 04 января 2010

Использовать simplexml_load_string вместо loadfile:

 simplexml_load_string($_POST['a']);

Если вы получили URL-адрес файла в POST, вы можете использовать функцию simplexml_load_file с URL-адресом, но если это не сработает, вы можете использовать file_get_contents в сочетании с simplexml_load_string:

//say $_POST['a'] == 'http://example.com/test.xml';
simplexml_load_file($_POST['a']); // <-- propably works
simplexml_load_string(file_get_contents($_POST['a'])); //<-- defenitly works (propaly what happens internally)

также получение содержимого внешних файлов может быть запрещено при запуске PHP в безопасном режиме.

2 голосов
/ 04 января 2010

Если вы получаете файл, который был загружен пользователем, вы можете найти его (файл) , просматривая содержимое суперглобальной переменной $_FILES - и Вы можете прочитать больше о загрузке файлов здесь (например, не забудьте позвонить move_uploaded_file, если вы не хотите, чтобы файл был удален в конце заявки) .

Затем вы можете работать с этим файлом так же, как вы уже работали с неподгруженными файлами.


Если вы получаете строку XML, вы можете использовать simplexml_load_string.


И если вы получаете только URL для удаленного XML-контента, вам необходимо:

  • скачать файл на свой сервер
  • и затем проанализируйте его содержимое.

Это можно сделать с помощью simplexml_load_file, передав URL-адрес в качестве параметра, если ваш сервер настроен правильно (т.е. если allow_url_fopen включен).

Иначе, загрузка должна быть выполнена с использованием curl - см. curl_exec для очень простого примера и curl_setopt для опции, которые вы можете использовать (вы особенно захотите использовать CURLOPT_RETURNTRANSFER, чтобы получить данные XML в виде строки, которую вы можете передать simplexml_load_string).

1 голос
/ 04 января 2010

С http://www.developershome.com/wap/wapUpload/wap_upload.asp?page=php4:

Если вы не хотите сохранять загруженный файл напрямую, но для обработки это, функции PHP file_get_contents () и fread () могут помочь тебе. File_get_contents () функция возвращает строку, которая содержит все данные загруженного Файл:

if (is_uploaded_file($_FILES['myFile']['tmp_name']))
  $fileData = file_get_contents($_FILES['myFile']['tmp_name']);

Это даст вам контроль над необработанным текстом в этом файле Оттуда вам нужно будет проанализировать XML. Надеюсь, это поможет!

0 голосов
/ 04 января 2010

Извлечь simplexml_load_string . Затем вы можете использовать cURL , чтобы сделать сообщение и получить результат. Пример:

<?php
$xml = simplexml_load_string($string_fetched_with_curl);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...