env:Envelope xmlns格式XML文件PHP解析soap-SOAP 接口获取XML
这几天在对接电信物联网DCP全球连接管理平台,之前文章已经说了,奇葩的API居然有两种形式:
- SOAP类接口调用 以下API采用了SOAP协议:
- 卡查询与管理类API;
- 使用量数据查询下载类API;
- 策略管控类API中的:
-
- 达量断网管理类;
- 触发器管理与告警类;
-
SOAP 是一项基于 XML 的协议,其允许在去中心化的分布式环境中交换信息。SOAP 消息是包含以下元素的普通 XML 文档:
- Envelope(封套):一个必要元素,用于将 XML 文档标识为 SOAP 消息。
- Header(标题):一个包含标题信息的可选元素。
- Body(正文):一个包含调用和响应信息的必要元素。
- Fault(错误):一个可选元素,其提供了与处理消息期间发生的错误有关的信息。
今天主要针对PHP解析soap-SOAP接口XML文件,PHP使用平常的方式根本就无法正常解析此XML,只能对接收到的XML文件进行编辑以后才能正常解析!XML格式如下(此XML已被我将某些信息修改):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'> <env:Header></env:Header> <env:Body> <ns2:QuerySimResourceResponse xmlns:ns2="http://api.dcp.ericsson.net/SubscriptionManagement"> <SimResource> <msisdn>86106237</msisdn> <imsi>46011106</imsi> <icc>89860308325</icc> <pin1>12/pin1> <pin2>9085</pin2> <puk1>9363</puk1> <puk2>6983</puk2> <imei>86803103</imei> <assignedImei></assignedImei> <customerNo>5609</customerNo> <accessControlClass>6</accessControlClass> <roamProfileName>1</roamProfileName> <deviceTerminalType></deviceTerminalType> <simSubscriptionStatus>Active</simSubscriptionStatus> <simCardDescription>物联卡10649号段</simCardDescription> <simSpecification>CT_10649_SD</simSpecification> <priceProfileName>PP000101389</priceProfileName> <productOfferName>1565000006230_SP_01</productOfferName> <pdpContextProfileName>PDPCP for ctnet CSD</pdpContextProfileName> <tenantId>1</tenantId> <userProfileId>CSD610</userProfileId> <firstActivationDate>2019-06-03T03:13:09.673Z</firstActivationDate> <gprs>true</gprs> <lte>true</lte> <smsMo>false</smsMo> <smsMt>false</smsMt> <csd>false</csd> <voice>false</voice> <clip>false</clip> <consumerConnectivity>false</consumerConnectivity> <apns> <apn> <name>ctnet</name> <description>ctnet</description> </apn> </apns> <installationDate>2019-06-03T03:13:09.673Z</installationDate> <pbrExitDate>2019-06-18T03:57:11Z</pbrExitDate> <lastSubscriptionDateChange>2019-06-03T03:13:09.673Z</lastSubscriptionDateChange> <moveToPermitted>true</moveToPermitted> <freezeDuration>0</freezeDuration> <chargeCodeForPPMove>false</chargeCodeForPPMove> <chargeCodeNonPPMove>false</chargeCodeNonPPMove> <customerName>南京物联网科技有限公司</customerName> <subscriptionPackageDescription>南京物联网-01-非定向阶梯计费-PBR50M180天</subscriptionPackageDescription> <operatorId>54000001</operatorId> </SimResource> </ns2:QuerySimResourceResponse> </env:Body> </env:Envelope> |
需要解析上面的XML需先进行字符串操作才可用正常php解析XML才可以,下面直接贴上代码:
1 2 3 4 5 6 7 |
// 将形如<soapenv:Envelope 替换为:<soapenvEnvelope $xmlStringnew = preg_replace('|<([/\w]+)(:)|m','<$1',$xmlStr); //将形如: xsi:type 替换为xsitype $xmlString = preg_replace('|(\w+)(:)(\w+=\")|m','$1$3',$xmlStringnew); libxml_disable_entity_loader(true); $array = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); var_dump($array); |
OK,已经可以正常解析soap-SOAP接口提供的XML文件了!
中间还遇到过各种坑,先不说了,要赶数据!
有些问题想请教下qq2510068053
直接留言沟通也可以的!
请问有联系方式吗,有个问题想请教下
右侧和下方既有联系方式