使用PHP接收,处理然后返回XML数据的最佳方法是什么?

时间:2011-03-07 18:51:47

标签: php xml http dom simplexml

我需要创建一个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的帖子,但这些似乎没有比我使用的方法更好。您可以给我的任何信息都将是一个很大的帮助。如果我能够澄清,请告诉我。

2 个答案:

答案 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();