我需要创建一个PHP脚本,通过HTTP POST请求接收XML输入,处理它,然后返回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响应。我相当肯定我可以在DOM或SimpleXML中创建XML,但我根本不明白如何将其返回到原始页面。另外,这是在PHP中处理XML输入的最佳方法吗?我看过很多关于php:// input或$ HTTP_RAW_POST_DATA的帖子,但这些似乎没有比我使用的方法更好。您可以给我的任何信息都将是一个很大的帮助。如果我能够澄清,请告诉我。
答案 0 :(得分:0)
很简单,您使用SimpleXml,
创建xml文档然后只是
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;
}
答案 1 :(得分:0)
您不想使用错误抑制运算符,但为此添加了正确的Option:
$dom = new DOMDocument;
$dom->loadXML($source, LIBXML_NOERROR);
另一种方法是使用libxml_use_internal_errors
。
响应基本上就是Web服务器发送回请求客户端的响应,因此要发送XML响应,只需使用XML标头回显XML,例如
。header ("Content-Type:text/xml; charset=utf-8");
echo $xml->asXML();