【问题标题】:Why is my simplexml_load_string not allowing me store xml attributes in a php variable?为什么我的 simplexml_load_string 不允许我将 xml 属性存储在 php 变量中?
【发布时间】:2016-09-24 11:40:06
【问题描述】:

我有一个 php 变量 ($output),其中包含一个具有以下属性的 xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="tns:ns">
<SOAP-ENV:Body><ns1:transactionStatusResponse>
<MSISDN>254705680609</MSISDN>
<AMOUNT>10</AMOUNT>
<MPESA_TRX_DATE>2016-05-21 10:57:43</MPESA_TRX_DATE>
<MPESA_TRX_ID>KEL7STGYEL</MPESA_TRX_ID>
<TRX_STATUS>Success</TRX_STATUS>
<RETURN_CODE>00</RETURN_CODE>
<DESCRIPTION>The service request is processed successfully.</DESCRIPTION>
<MERCHANT_TRANSACTION_ID/>
<ENC_PARAMS></ENC_PARAMS>
<TRX_ID>308e6137d9888ee8ead15c9577802947</TRX_ID>
</ns1:transactionStatusResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

现在我正在尝试将单个 xml 属性放入 php 变量中,但我似乎没有工作。这就是我试图用来提取各个属性的方法

$xml = @simplexml_load_string($output);
$MPESA_TRX_ID= (string)$xml->MPESA_TRX_ID; 
$MSISDN = (string)$xml->MSISDN;
$AMOUNT = (string)$xml->AMOUNT;

有什么解决方法吗?

【问题讨论】:

  • XML 无效。描述的开始标签不正确。 &lt;RETURN_CODE&gt;00&lt;/RETURN_CODE&gt;&lt; DESCRIPTION&gt;The service request is processed successfully.&lt;/DESCRIPTION&gt; 应该是 &lt;RETURN_CODE&gt;00&lt;/RETURN_CODE&gt;&lt;DESCRIPTION&gt;The service request is processed successfully.&lt;/DESCRIPTION&gt;。 DESCRIPTION 开始标记中有一个换行符。

标签: php xml xml-parsing xmlhttprequest


【解决方案1】:

这是一种处理问题中 xml 的方法

$xml = @simplexml_load_string($output);
$xml->registerXPathNamespace("soap","http://schemas.xmlsoap.org/soap/envelope/");
$xml->registerXPathNamespace("ns1","tns:ns");

$xml2 = $xml->xpath("//soap:Envelope/soap:Body/ns1:transactionStatusResponse");
/*
foreach($xml2 as $item){
    var_dump($item->getName());
    browse($item);
    echo "\n";
}

function browse($elem)
{
    if($elem->children())
    {
        foreach($elem->children() as $child)
        {
            var_dump($child->getName());
            browse($child);
        }
    }
}

exit();
*/

$MPESA_TRX_ID = (string) $xml2[0]->MPESA_TRX_ID;
$MSISDN       = (string) $xml2[0]->MSISDN;
$AMOUNT       = (string) $xml2[0]->AMOUNT;

var_dump($MPESA_TRX_ID);
echo "\n";
var_dump($MSISDN);
echo "\n";
var_dump($AMOUNT);

输出:

字符串(10)“KEL7STGYEL” 字符串(12)“254705680609” 字符串(2)“10”

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 2014-10-17
    • 2019-06-06
    • 2017-02-21
    • 2011-04-26
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    相关资源
    最近更新 更多