Как разместить XML на сервере через HTML-форму?

Я должен публиковать данные из моей HTML-формы на сервер в формате xml, что-то вроде:

<some_parameters>
    <firstname>Homer</firstname>
    <lastname>Simpson</lastname>
    <street>74 Evergreen Tr.</street>
</some_parameters>

все, что я знаю, это идет в одно из приложений CRM, запущенных в другом домене. Теперь я не уверен, что это лучший способ сделать это.

Я думал просто обернуть значения полей в моей форме, когда пользователь отправляет форму. Поэтому, если пользователь набрал "Homer" в поле "firstname" и нажал submit, мой JS изменил бы значение поля на <firstname>Homer</firstname> и затем опубликуйте данные.

Если это помогает, я использую jQuery на стороне клиента. Я думаю, что должен быть лучший способ, поскольку мое решение сломается с отключенным JS и кажется немного изворотливым, поэтому, если бы вы могли указать мне в правильном направлении, это было бы потрясающе.

5 ответов


лучший способ, который я могу придумать, - перехватить действие отправки формы и преобразовать данные формы в формат XML, а затем отправить это на сервер. Есть много способов сделать это, но проще всего было бы реализовать решение через фреймворк, такой как jQuery:

пример этой самой вещи можно найти в интернете по адресуhttp://www.docunext.com/...data-to-xml-with-jquery который использует JSON в XML плагин:

$("#myform").submit(function(){
  var formjson = $('#myform').serializeArray();
  var formxml = json2xml(formjson);
  $.post("/collect.php", { 'data': formxml }, function(data){ 
    // callback logic
  });
  return false;
});

публикация XML без javascript или плагинов браузера невозможна. Двумя возможными форматами размещения html-форм являются application/x-www-form-urlencoded и multipart/form-data.


Я только что получил это для работы в chrome, ключ имеет пустое место в имени текстовой области:

<html>
    <body>
        <form action="http://target_webservice" method="post">
            <textarea rows="20" cols="100" name=" ">
                <?xml version="1.0"?><requestElements><blah></blah></requestElements>
            </textarea>
            <input type="submit" value="Submit">
        </form>        
    </body>
</html> 

вы можете отправить XML с помощью X-форм. Например, см.: http://www.mozilla.org/projects/xforms/


Если серверный код является опцией, вы можете использовать пользовательский скрипт PHP CURL в качестве посредника для пересылки вашего запроса третьей стороне в фактическом формате xml. Я не уверен, что CURL поставляется со стандартной установкой php, и если это не вариант, вы могли бы использовать fsocketopen вместо этого (хотя лично я думаю, что эта тактика сложнее). Но CURL достаточно прост в установке и чрезвычайно полезен для того, чтобы php мог отправлять запросы, как будто это браузер. Разница в том, что вас может заинтересовать здесь то, что он действительно позволяет вам установить заголовок "Content-type: text/xml".

поэтому Ваша html-форма отправляет некоторые регулярные значения GET или POST в ваш PHP-скрипт. Затем этот персональный PHP-скрипт преобразует их в формат XML, который ожидает третья сторона. (Не забудьте предшествовать ему с <?xml version="1.0" encoding="ISO-8859-1"?> tag, с любыми значениями атрибутов, подходящими для вас.) И затем отправьте его через этот код:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlRequest);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-type: text/xml', 
    'Content-length: '.strlen($xmlRequest),
));
$output = curl_exec($ch);
curl_close($ch);