我正在使用一个将HTTP POST提交到PHP页面的Web服务,如下所示:
FORM / POST参数: 无
标头: 内容类型:text / xml
BODY:
<?xml version="1.0"?>
<mogreet>
<event>message-in</event>
<type>command_sms</type>
<campaign_id>12345</campaign_id>
<shortcode>123456</shortcode>
<msisdn>15552345678</msisdn>
<carrier><![CDATA[T-Mobile]]></carrier>
<carrier_id>2</carrier_id>
<message><![CDATA[xxxx testing]]></message>
</mogreet>
我需要能够将每个XML元素转换为PHP变量,以便我可以更新数据库。我以前从未使用过带有XML数据的传入POST,也不知道在哪里starT - 我熟悉处理传入的GET / POST请求但不熟悉原始xml。
答案 0 :(得分:1)
我认为您需要使用$HTTP_RAW_POST_DATA
。之后,您可以使用SimpleXMLElement
作为@ChristianGolihardt建议。
请注意HTTP_RAW_POST_DATA
仅在php.ini中启用always_populate_raw_post_data
设置时可用。否则,最简单的方法是这样做:
$postData = file_get_contents("php://input");
...
$xml = new SimpleXMLElement($postData);
...
答案 1 :(得分:0)
看看SimpleXMLElement
:
http://php.net/manual/de/class.simplexmlelement.php
$xmlstr = $_POST['key'];
$xml = new SimpleXMLElement($xmlstr);
//work with $xml like this:
$event = $xml->mogreet->event;
如果您这样做,可以看到密钥:
print_r($_POST);
大多数时候,我们使用这种api,我们想记录它,因为我们看不到它:
$debugFile = 'debug.log'
file_put_contents($debugFile, print_r($_POST, true), FILE_APPEND);
另请参阅Matt Browne的答案,获取原始输入。
答案 2 :(得分:0)
这将消除所有SimpleXMLElement对象并返回您的数组:
来自xml字符串:
<?php
$xml='<?xml version="1.0"?>
<mogreet>
<event>message-in</event>
<type>command_sms</type>
<campaign_id>12345</campaign_id>
<shortcode>123456</shortcode>
<msisdn>15552345678</msisdn>
<carrier><![CDATA[T-Mobile]]></carrier>
<carrier_id>2</carrier_id>
<message><![CDATA[xxxx testing]]></message>
</mogreet>';
$xml = simplexml_load_string($xml);
$xml_array = json_decode(json_encode((array) $xml), 1);
print_r($xml_array);
?>
来自xml文件:
$xml = simplexml_load_file("mogreet.xml");
$xml_array = json_decode(json_encode((array) $xml), 1);
print_r($xml_array);
输出:
Array
(
[event] => message-in
[type] => command_sms
[campaign_id] => 12345
[shortcode] => 123456
[msisdn] => 15552345678
[carrier] => Array
(
)
[carrier_id] => 2
[message] => Array
(
)
)