PDA

Просмотр полной версии : обработки XML сообщения полученного по POST


burcev
18.02.2009, 23:38
Сразу к делу.
Мне необходимо обработать xml - сообщение, само сообщение передают постом. Кто отправляет я не знаю.
Просто POST- ом передали мне в скрипт хмл, - я его должет обработать .

Как узнать что пришло сообщение в скрипте, как xml засунуть в переменную для парсинга и т.д.
Вообще не имею представление как сделать.

Помогите кто чем может.

З.Ы.: заранее благодарен

.:EnoT:.
18.02.2009, 23:46
Узнать что пришло сообщение в скрипте...проверить $_POST.
тупо if(!empty($_POST))

А вот по поводу парсинга могу лишь дать ссылки на ф-ции для работы с xml и json (для php), потому что не ясно как тебе нужно обрабатывать полученный код.

http://www.php.su/functions/?cat=xml
http://ru.php.net/manual/ru/ref.json.php

burcev
18.02.2009, 23:59
Спс. сча инфу буду смотреть.

burcev
19.02.2009, 02:02
Допустим я передаю данные скрипту вот так:

function callServer() {
var obj = document.getElementById('clock');

var req;


// Get the city and state from the Web form
var firstName = "ffff";
var lastName = "aaaaa";
var street = "ggggg";
var city = "33333l";
var state = "ZP";
var zipCode = "565677";

var xmlString = "<profile>" +
" <firstName>" + escape(firstName) + "</firstName>" +
" <lastName>" + escape(lastName) + "</lastName>" +
" <street>" + escape(street) + "</street>" +
" <city>" + escape(city) + "</city>" +
" <state>" + escape(state) + "</state>" +
" <zip-code>" + escape(zipCode) + "</zip-code>" +
"</profile>";

// Построим URL для соединения
var url = "saveAddress.php";



if (window.XMLHttpRequest) req = new XMLHttpRequest();
else if(window.ActiveXObject)
{
try {
req = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e){}
try {
req = new ActiveXObject('Microsoft.XMLHTTP');
} catch (e){}
}

if (req)
{
req.onreadystatechange = function()
{
if (req.readyState == 4 && req.status == 200)
{ obj.innerHTML = req.responseXML; }
};

// Откроем соединение с сервером
req.open("POST", url, true);

// Сообщим серверу, что вы посылаете данные в формате XML
req.setRequestHeader("Content-Type", "text/xml");

// Установим функцию запуска сервера, когда это выполнено
//req.onreadystatechange = confirmUpdate;

// Отправим заказ
req.send(xmlString);

}
else alert("Браузер не поддерживает AJAX");
}


как мне в saveAddress.php обработать хил который я передаю? И вообще как определить что я его передал?

.:EnoT:.
19.02.2009, 02:10
Собственно:
req.send('field=' + xmlString);

а в самом скрипте получаешь:
<?php

if(!empty($_POST['field'])){

//Парсишь

}

?>

а дальше парсишь....опять же не знаю что тебе конкретно нужно парсить....вывести как html или ещё что-то

Chaak
19.02.2009, 03:12
Енот нафига?

Тс, шли данные напрямую

req.send(xmlString);

А в скрипте:
$xmlData = isset($_POST)?(implode('', $_POST)):(array());

.:EnoT:.
19.02.2009, 03:53
не, так не интересно

burcev
19.02.2009, 10:58
мне действительно нужно напрямую передавать, без ключей . Это не я передаю (мне в скрипт некий сервер бросаем хмл, я его должен отпарсить(бла-бла-бла) и ответить ему тоже хмл-сообщение)

burcev
19.02.2009, 11:00
тот скрипт я как пример написал. чтобы был понятно чё мне надо :)

burcev
19.02.2009, 11:49
что-то таким методом
$xmlData = isset($_POST)implode('', $_POST))array());
не получается поймать XML пакет :( .

Может для этого какой-то сниффер нужен, который будет ловить XML пакеты. А отдельный скрипт будет собирать эти пакеты? или есть другое решение(более простое)?

Помогите, кто чем может.

burcev
20.02.2009, 11:37
хе-хе. нашел решение.
$xmlDATA = $GLOBALS["HTTP_RAW_POST_DATA"];
вот и всё. :)

Chaak
20.02.2009, 12:15
Только в php6 его не будет, пишите свои бажные скрипты, потом засоряйте форум тупыми вопросами почему не работает.

P.S обновил свой пост, скрипт не работал из-за смайлов :) обнови.

groundhog
20.02.2009, 12:22
Это ты с разрабами уже договорился? Глобалсов может и не будет в шестёрке, а предопределённая переменая $HTTP_RAW_POST_DATA будет всегда, ну если, конечно, always_populate_raw_post_data в php.ini включен.