欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

simplexmlelement - PHP 如何得到simplexml_load_string 的值

程序员文章站 2022-05-31 23:33:11
...

问题

/**
 * 通过节点路径返回字符串的某个节点值
 * $res_data——XML 格式字符串
 * 返回节点参数
 */
function getDataForXML($res_data, $node)
{
    $xml = simplexml_load_string($res_data);
    $result = $xml->xpath($node);


    while (list(, $node) = each($result)) {
        return $node;
    }
}

$_POST = array(
    'service'     => 'alipay.wap.trade.create.direct',
    'sign'        => 'db56d137c71f591abd58b41d5da5f920',
    'sec_id'      => 'MD5',
    'v'           => '1.0',
    'notify_data' => '1充值2014123069117121default@gmail.com2014-12-30 22:12:32trade_status_sync114123022894432014-12-30 22:12:562088211987518229TRADE_FINISHEDN0.112014-12-30 22:12:56zfb@gmail.cn2014-12-30 22:12:560.1120881021937912118f3d3703e293b95d8de26cbd51d74fe116N',
);


$out_trade_no = getDataForXML($_POST['notify_data'],'/notify/out_trade_no');
var_dump( ($out_trade_no == '1412302289443' )); //true
var_dump($out_trade_no);//object(SimpleXMLElement)[2]

如何才可以得到 $out_trade_no 的值

回复内容:

问题

/**
 * 通过节点路径返回字符串的某个节点值
 * $res_data——XML 格式字符串
 * 返回节点参数
 */
function getDataForXML($res_data, $node)
{
    $xml = simplexml_load_string($res_data);
    $result = $xml->xpath($node);


    while (list(, $node) = each($result)) {
        return $node;
    }
}

$_POST = array(
    'service'     => 'alipay.wap.trade.create.direct',
    'sign'        => 'db56d137c71f591abd58b41d5da5f920',
    'sec_id'      => 'MD5',
    'v'           => '1.0',
    'notify_data' => '1充值2014123069117121default@gmail.com2014-12-30 22:12:32trade_status_sync114123022894432014-12-30 22:12:562088211987518229TRADE_FINISHEDN0.112014-12-30 22:12:56zfb@gmail.cn2014-12-30 22:12:560.1120881021937912118f3d3703e293b95d8de26cbd51d74fe116N',
);


$out_trade_no = getDataForXML($_POST['notify_data'],'/notify/out_trade_no');
var_dump( ($out_trade_no == '1412302289443' )); //true
var_dump($out_trade_no);//object(SimpleXMLElement)[2]

如何才可以得到 $out_trade_no 的值

var_dump( (String)$out_trade_no ); 

simplexml解析得到的是simpleElement对象,需要类型转换,如公子所说的方法即可

$doc = new DOMDocument();
$doc->loadXML($_POST['notify_data']);
$doc->getElementsByTagName( "out_trade_no" )->item(0)->nodeValue;