$xml = file_get_contents('php://input');获取的xml,xml的格式就是<xml><ToUserName><![CDATA[aaaa]]></ToUserName> <FromUserName><![CDATA[bbbbbbbbbbbbbbbb]]></FromUserName> <CreateTime>111111111111</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[ddddddddddddddddd]]></Event>php如何将这串xml转成对应的数组,帮我写一下代码
时间: 2023-08-17 07:29:39 浏览: 53
当使用 `file_get_contents('php://input')` 获取 XML 数据时,可以使用以下代码将其转换为对应的数组:
```php
$xml = file_get_contents('php://input');
$data = [];
if (!empty($xml)) {
$xml = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
if ($xml !== false) {
$data = json_decode(json_encode($xml), true);
}
}
```
这段代码首先判断获取到的 XML 数据是否为空,如果不为空则使用 `simplexml_load_string` 函数将其转换为 SimpleXMLElement 对象 `$xml`,然后使用 `json_encode` 和 `json_decode` 函数将其转换为数组 `$data`。
需要注意的是,这段代码中同样使用了 `LIBXML_NOCDATA` 参数来防止 CDATA 节点被解析为 SimpleXMLElement 对象。
相关问题
<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> <soapenv:Body xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ESB_CS_QRY_USED_RESUSED_001 xmlns="http://esb-sc. yw.zj.chinamobile.com"> <reqXml xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <![CDATA[ <?xml version="1.0" encoding="UTF-8"?><RESP_PARAM><PUB_INFO><RETURN_RESULT>0</RETURN_RESULT><RETURN_DESC>操作成功</RETURN_DESC><OSB_SERIAL_NO>gateway-app-zt^16846071330000000001</OSB_SERIAL_NO></PUB_INFO><BUSI_INFO><GPRS_INFO><GPRS_IN>0</GPRS_IN><GPRS_OUT>0</GPRS_OUT><GPRS_OTHER>0</GPRS_OTHER><GPRS_DURA>0</GPRS_DURA><GPRS_FEE>0</GPRS_FEE></GPRS_INFO><MMS_INFO><MMS_AMOUNT>0</MMS_AMOUNT></MMS_INFO><SMS_INFO><TOTAL_MSG_NUM>15</TOTAL_MSG_NUM><OUT_MSG_NUM>0</OUT_MSG_NUM><INNER_MSG_NUM>0</INNER_MSG_NUM><MEN_MSG_NUM>15</MEN_MSG_NUM></SMS_INFO></BUSI_INFO></RESP_PARAM>]]> </reqXml> </ESB_CS_QRY_USED_RESUSED_001> </soapenv:Body> </soapenv:Envelope>
好的,以下是将该返回内容转换为 JSON 的方法:
1. 点击 Postman 中响应 Body 旁边的 `Code` 按钮,在弹出的对话框中选择 `Node.js - request` 代码片段。
2. 将代码片段中的 `body` 变量赋值为返回内容,即替换下面代码中的 `XMLRESPONSE`:
```
var body = `<xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<soapenv:Body xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ESB_CS_QRY_USED_RESUSED_001 xmlns="http://esb-sc. yw.zj.chinamobile.com">
<reqXml xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<![CDATA[
<?xml version="1.0" encoding="UTF-8"?><RESP_PARAM><PUB_INFO><RETURN_RESULT>0</RETURN_RESULT><RETURN_DESC>操作成功</RETURN_DESC><OSB_SERIAL_NO>gateway-app-zt^16846071330000000001</OSB_SERIAL_NO></PUB_INFO><BUSI_INFO><GPRS_INFO><GPRS_IN>0</GPRS_IN><GPRS_OUT>0</GPRS_OUT><GPRS_OTHER>0</GPRS_OTHER><GPRS_DURA>0</GPRS_DURA><GPRS_FEE>0</GPRS_FEE></GPRS_INFO><MMS_INFO><MMS_AMOUNT>0</MMS_AMOUNT></MMS_INFO><SMS_INFO><TOTAL_MSG_NUM>15</TOTAL_MSG_NUM><OUT_MSG_NUM>0</OUT_MSG_NUM><INNER_MSG_NUM>0</INNER_MSG_NUM><MEN_MSG_NUM>15</MEN_MSG_NUM></SMS_INFO></BUSI_INFO></RESP_PARAM>
]]>
</reqXml>
</ESB_CS_QRY_USED_RESUSED_001>
</soapenv:Body>
</soapenv:Envelope>`;
```
3. 在代码片段中添加以下代码来将 XML 转换为 JSON:
```
var parseString = require('xml2js').parseString;
parseString(body, function (err, result) {
console.log(JSON.stringify(result));
});
```
4. 点击 `Send` 按钮,运行代码片段并在控制台中查看转换后的 JSON 结果。
以上就是将该返回内容转换为 JSON 的方法。希望对您有所帮助!
帮我解释一下下列代码:<?php $xml = <<<EOF <?xml version = "1.0"?> <!DOCTYPE ANY [ <!ENTITY f SYSTEM "except://ls"> ]> <x>&f;</x> EOF; $data = simplexml_load_string($xml); print_r($data); ?>
这段代码使用 PHP 中的 `simplexml_load_string()` 函数来解析 XML 字符串并将其转换为 SimpleXMLElement 对象。让我逐行解释这段代码的功能:
1. `<?php` 和 `?>`:这是 PHP 代码的开始和结束标记。
2. `$xml`:定义了一个包含 XML 字符串的变量。该 XML 字符串包含一个实体引用(ENTITY),引用了一个名为 `f` 的实体,其值是通过 `except://ls` 获取的内容。
3. `simplexml_load_string($xml)`:该函数将 XML 字符串解析为 SimpleXMLElement 对象。它会返回一个表示 XML 数据的对象,您可以使用该对象访问和操作 XML 数据。
4. `print_r($data)`:将 SimpleXMLElement 对象 `$data` 打印出来。`print_r()` 函数用于打印变量的易读信息,方便调试和查看数据。
现在让我们来看一下给定的 XML 字符串的结构:
```xml
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "except://ls">
]>
<x>&f;</x>
```
该 XML 字符串包含一个根元素 `<x>`,其中包含一个实体引用 `&f;`。实体引用指向一个名为 `f` 的实体,其值是通过 `except://ls` 获取的内容。
请注意,`except://ls` 是一个伪协议,它并不是真实存在的协议。在这个示例中,它被用于演示可能存在的安全漏洞。实际上,这段代码是为了提醒您在处理 XML 数据时要谨慎,避免可能的安全风险。
希望这段解释对您有帮助!如果您还有其他问题,请随时提问。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)