2017-09-12 18 views
0

私はsoap xmlを持っていますが、インデックスを使用せずに値を取得するのは難題です。soap xmlのキーから値を取得する方法

のxml:

<?xml version="1.0" encoding="UTF-8"?> 
<Result xmlns="http://api-v1.gen.mm.vodafone.com/mminterface/result"> 
    <ResultType>0</ResultType> 
    <ResultCode>0</ResultCode> 
    <ResultDesc>The service request is processed successfully.</ResultDesc> 
    <ResultParameters> 
    <ResultParameter> 
     <Key>TransactionAmount</Key> 
     <Value>500</Value> 
    </ResultParameter> 
    <ResultParameter> 
     <Key>TransactionReceipt</Key> 
     <Value>LIB967VYGF</Value> 
    </ResultParameter> 
    </ResultParameters> 
    <ReferenceData> 
    <ReferenceItem> 
     <Key>QueueTimeoutURL</Key> 
     <Value>https://xx.xx.xx.xx:8080/NotificationService?wsdl</Value> 
    </ReferenceItem> 
    </ReferenceData> 
</Result> 

値を得るために、私は、XMLを解析。

$xml=simplexml_load_string($response) or die("Error: Cannot create object"); 

次に、オブジェクトから値を取得します。

$ResultType=$xml->ResultType; 
$ResultCode=$xml->ResultCode; 
$ResultDesc= $xml->ResultDesc; 

残りは<ResultParameters>タグの残りの部分です。

これは、索引とは別の安全な方法で変更することができます。 <ResultParameter>が交換された場合、これは失敗します。

これは私がそれらを得るために行うものです。

$Amount= $xml->ResultParameters->ResultParameter[0]->Value; 
$TransactionReceipt= $xml->ResultParameters->ResultParameter[1]->Value; 

誰でもここで秘密を共有してください。

答えて

1

XPathを使用すると、<Key>TransactionAmount</Key>のエントリが見つかり、そこから値を追跡できます。しかし、XPathは、デフォルトの名前空間のようなものです。したがって、各要素は接頭辞:elementNameによって参照される必要があります。

まず、ネームスペースを登録して(接頭辞を簡単にして)、<Key>を開始点として検索します。

$xml=simplexml_load_string($response); 
$xml->registerXPathNamespace("default", "http://api-v1.gen.mm.vodafone.com/mminterface/result"); 

$amount= (string)$xml->xpath("//default:Key[text()='TransactionAmount']/../default:Value/text()")[0]; 

echo "Amount=".$amount.PHP_EOL; 

->xpathは、配列から最初の項目を取得するだけです。しかし、これはまだオブジェクトであるため、文字列へのキャストは、(一般的に)より便利なものになります。

必要なその他の値についても同様のことを行います。

関連する問題