我正在尝试获取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;任何帮助都将不胜感激。谢谢你!!
发布于 2012-07-18 09:53:53
由于某些原因,最后一个ResponseId对我不起作用。
然而,我“作弊”了,ResponseHdr的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"发布于 2012-07-18 14:53:26
试试这个:
将其另存为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
$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>";
}
?>希望这能有所帮助。
https://stackoverflow.com/questions/11533069
复制相似问题