2012-07-18 84 views
0

我想获取ResponseId和MAP_IMAGE_ZOOM1000中的值,但我收到来自var_dump的空响应。simplexml_load_string无法检索值

<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>123456789</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

由于某种原因,最后ResponseId不适合我。

然而,我 “骗”,和ResponseHdrI 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 = 123456789" 
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" 
+0

谢谢!那就是诀窍:) – 2012-07-18 07:19:27

+0

@StevenTangTiKhoon - 不客气!如果我的帖子回答了你的问题,请[考虑接受它](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – nickb 2012-07-18 12:43:10

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>123456789</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>"; 
} 
?> 

希望这会有所帮助。