我试图在ResponseId和MAP_IMAGE_ZOOM1000中获取值,但我从var_dump收到空响应。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org /soap/envelope/">
<soapenv:Header xmlns:get="http://tnb.com.my/CGIS/D/getcustareasnapshotpro" xmlns:bsm="http://www.tnb.com.my/CGIS/schemas/bsmfpro" xmlns:cgis="http://tnb.com.my/CGIS/D/cgis_cmccustomermgnt"/>
<soapenv:Body xmlns:get="http://tnb.com.my/CGIS/D/getcustareasnapshotpro" xmlns:bsm="http://www.tnb.com.my/CGIS/schemas/bsmfpro" xmlns:cgis="http://tnb.com.my/CGIS/D/cgis_cmccustomermgnt">
<get1:GetCustAreaSnapshotResponseParam xmlns:get1="http://tnb.com.my/CGIS/D/getcustareasnapshotcon">
<ResponseHdr>
<bsm:ResponseId>gero etgero etgero etgero etgero</bsm:ResponseId>
<bsm:ResTransactionId>123456789012345</bsm:ResTransactionId>
<bsm:ProviderId>CGIS</bsm:ProviderId>
<bsm:ResTimestamp>2004-02-15T02:44:14</bsm:ResTimestamp>
<bsm:ResStatus>SUCC</bsm:ResStatus>
<bsm:MsgCode>IM-001</bsm:MsgCode>
<bsm:MsgDesc>Success</bsm:MsgDesc>
</ResponseHdr>
<ResGetCustAreaSnapshot>
<cmc:GetCustAreaSnapshot xmlns:cmc="http://tnb.com.my/CGIS/D/cmc_customermgnt">
<cmc:MAP_IMAGE_ZOOM1000>abc</cmc:MAP_IMAGE_ZOOM1000>
</cmc:GetCustAreaSnapshot>
</ResGetCustAreaSnapshot>
</get1:GetCustAreaSnapshotResponseParam>
$Envelope = simplexml_load_string($responseXml);
$Envelope->registerXPathNamespace('soap','http://schemas.xmlsoap.org/soap/envelope/');
$Envelope->registerXPathNamespace('bsm','http://www.tnb.com.my/CGIS/schemas/bsmfpro/');
$Envelope->registerXPathNamespace('cmc','http://tnb.com.my/CGIS/D/cgis_cmccustomermgnt/');
$Envelope->registerXPathNamespace('get','http://tnb.com.my/CGIS/D/getcustareasnapshotcon/');
$result = $Envelope->xpath('soap:Envelope/soap:Body/get:GetCustAreaSnapshotResponseParam/ResponseHdr/bsm:ResponseId');
var_dump($result);
die;
任何帮助将不胜感激。谢谢!!
答案 0 :(得分:0)
由于某种原因,最后ResponseId
对我不起作用。
但是,我ResponseHdr
作弊&#34;和I can select the first child:
$result = $Envelope->xpath('//soapenv:Envelope/soapenv:Body/get1:GetCustAreaSnapshotResponseParam/ResponseHdr/*[1]');
编辑: Here是我能用SimpleXML做的最好的。我会尝试DOMDocument,因为它可能是一个更好的选择。
$result = $Envelope->xpath('//soapenv:Envelope/soapenv:Body/get1:GetCustAreaSnapshotResponseParam/ResponseHdr');
foreach( $result[0]->children('bsm', true) as $node) var_dump( $node->getName() . ' = ' . (string) $node);
$result = $Envelope->xpath('//soapenv:Envelope/soapenv:Body/get1:GetCustAreaSnapshotResponseParam/ResGetCustAreaSnapshot/*[1]');
foreach( $result[0]->children('cmc', true) as $node) var_dump( $node->getName() . ' = ' . (string) $node);
鉴于上面的代码,我能够获得以下输出:
string(45) "ResponseId = gero etgero etgero etgero etgero"
string(34) "ResTransactionId = 123456789012345"
string(17) "ProviderId = CGIS"
string(34) "ResTimestamp = 2004-02-15T02:44:14"
string(16) "ResStatus = SUCC"
string(16) "MsgCode = IM-001"
string(17) "MsgDesc = Success"
string(24) "MAP_IMAGE_ZOOM1000 = abc"
答案 1 :(得分:0)
试试这个:
将其另存为ns.xml
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header xmlns:get="http://tnb.com.my/CGIS/D/getcustareasnapshotpro" xmlns:bsm="http://www.tnb.com.my/CGIS/schemas/bsmfpro" xmlns:cgis="http://tnb.com.my/CGIS/D/cgis_cmccustomermgnt"/>
<soapenv:Body xmlns:get="http://tnb.com.my/CGIS/D/getcustareasnapshotpro" xmlns:bsm="http://www.tnb.com.my/CGIS/schemas/bsmfpro" xmlns:cgis="http://tnb.com.my/CGIS/D/cgis_cmccustomermgnt">
<get1:GetCustAreaSnapshotResponseParam xmlns:get1="http://tnb.com.my/CGIS/D/getcustareasnapshotcon">
<ResponseHdr>
<bsm:ResponseId>gero etgero etgero etgero etgero</bsm:ResponseId>
<bsm:ResTransactionId>123456789012345</bsm:ResTransactionId>
<bsm:ProviderId>CGIS</bsm:ProviderId>
<bsm:ResTimestamp>2004-02-15T02:44:14</bsm:ResTimestamp>
<bsm:ResStatus>SUCC</bsm:ResStatus>
<bsm:MsgCode>IM-001</bsm:MsgCode>
<bsm:MsgDesc>Success</bsm:MsgDesc>
</ResponseHdr>
<ResGetCustAreaSnapshot>
<cmc:GetCustAreaSnapshot xmlns:cmc="http://tnb.com.my/CGIS/D/cmc_customermgnt">
<cmc:MAP_IMAGE_ZOOM1000>abc</cmc:MAP_IMAGE_ZOOM1000>
</cmc:GetCustAreaSnapshot>
</ResGetCustAreaSnapshot>
</get1:GetCustAreaSnapshotResponseParam>
</soapenv:Body>
</soapenv:Envelope>
获取节点的PHP代码:
<?php
$xml = simplexml_load_file( 'ns.xml' );
$xml->registerXPathNamespace('b', 'http://www.tnb.com.my/CGIS/schemas/bsmfpro');
$xml->registerXPathNamespace('c', 'http://tnb.com.my/CGIS/D/cmc_customermgnt');
$xpath = $xml->xpath( '//b:ResponseId | //c:MAP_IMAGE_ZOOM1000' );
foreach( $xpath as $key => $value ) {
// echo the node name and its value
echo $value->getName() . ' => ' . $value . "\n<br>";
}
?>
希望这有帮助。