Каков наилучший способ получения, обработки и возврата данных XML с использованием PHP? - PullRequest
0 голосов
/ 07 марта 2011

Мне нужно создать скрипт PHP, который получает XML-ввод через HTTP-запрос POST, обрабатывает его и затем возвращает XML-ответ.Я потратил довольно много времени, пытаясь сделать это самостоятельно, и вот что у меня есть до сих пор.

Сначала я быстро собрал HTML-форму, которая позволяет пользователю отправлять данные XML в виде строки, XML URI.в виде строки или XML URI для моего сценария PHP.Эта форма предназначена только для тестирования, так как мне поручено только создать этот скрипт.

В моем PHP-скрипте я выполняю некоторую обработку ввода ...

// Checks that some XML input has been given
if (!(isset($_POST['xmlinput']))) {
    handleErrors("No XML Input Given");
}

// Creates a new DOM Document
$domdoc = new DomDocument;

// Sets the URL of the XML Schema
$xmlschema = "xmlschema.xsd";

// If XML input is a file, tries to load it
if (file_exists($_POST['xmlinput'])) {
    if (!$domdoc->load($_POST['xmlinput'])) {
        handleErrors("Error in XML File");
    }
}
// If XML input is not a file, tries to load it as a string
else {
    if (!$domdoc->loadXML($_POST['xmlinput'])) {
        handleErrors("Error in XML Document");
    }
}

// Validates the XML against the schema
if (!($domdoc->schemaValidate($xmlschema))) {
    handleErrors("XML Does Not Conform To Schema");
}

Затем я делаю некоторые вещи нао том, что XML-данные, а затем я хочу сгенерировать XML-ответ.Я вполне уверен, что могу создать XML в DOM или SimpleXML, но я просто не понимаю, как вернуть его на исходную страницу.Кроме того, это лучший метод для обработки ввода XML в PHP?Я видел тонну постов о php: // input или $ HTTP_RAW_POST_DATA, но они, похоже, не лучше, чем метод, который я использую.Любая информация, которую вы можете дать мне, очень помогла бы.Если я смогу уточнить, просто дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 07 марта 2011

Вы не хотите использовать оператор подавления ошибок, но для этого добавляете параметр :

$dom = new DOMDocument;
$dom->loadXML($source, LIBXML_NOERROR);

В качестве альтернативы можно использовать libxml_use_internal_errors.

Ответ - это в основном только то, что веб-сервер отправляет обратно запрашивающему клиенту, поэтому, чтобы отправить ответ XML, вы просто отправляете свой XML с заголовком XML, например,

header ("Content-Type:text/xml; charset=utf-8");
echo $xml->asXML();
0 голосов
/ 07 марта 2011

Очень просто, вы создаете свой XML-документ, используя SimpleXml ,

тогда просто

echo $xml->asXML();

Если вам нужно опубликовать данные XML в веб-сервисе,

Вы можете использовать следующий код для достижения этого.

function do_post_request($url, $data, $optional_headers = null)
{
  $params = array('http' => array(
              'method' => 'POST',
              'content' => $data
            ));
  if ($optional_headers !== null) {
    $params['http']['header'] = $optional_headers;
  }
  $ctx = stream_context_create($params);
  $fp = @fopen($url, 'rb', false, $ctx);
  if (!$fp) {
    throw new Exception("Problem with $url, $php_errormsg");
  }
  $response = @stream_get_contents($fp);
  if ($response === false) {
    throw new Exception("Problem reading data from $url, $php_errormsg");
  }
  return $response;
}
...