首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >simplexml_load_string无法检索值

simplexml_load_string无法检索值
EN

Stack Overflow用户
提问于 2012-07-18 09:22:33
回答 2查看 491关注 0票数 0

我正在尝试获取ResponseId和MAP_IMAGE_ZOOM1000中的值,但从var_dump收到了空响应。

代码语言:javascript
复制
<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>
代码语言:javascript
复制
$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;

任何帮助都将不胜感激。谢谢你!!

EN

回答 2

Stack Overflow用户

发布于 2012-07-18 09:53:53

由于某些原因,最后一个ResponseId对我不起作用。

然而,我“作弊”了,ResponseHdrI can select the first child

代码语言:javascript
复制
$result = $Envelope->xpath('//soapenv:Envelope/soapenv:Body/get1:GetCustAreaSnapshotResponseParam/ResponseHdr/*[1]');

编辑: Here是我能用SimpleXML做的最好的。不过,我将尝试使用DOMDocument,因为它可能是更好的替代方案。

代码语言:javascript
复制
$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);

根据上面的代码,我可以得到以下输出:

代码语言:javascript
复制
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"
票数 0
EN

Stack Overflow用户

发布于 2012-07-18 14:53:26

试试这个:

将其另存为ns.xml

代码语言:javascript
复制
<?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>

获取节点的代码:

代码语言:javascript
复制
<?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>";
}
?>

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11533069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档