PHP

2011-01-21 1 views
2

でのDOMNodeListに形式のWebサービスの戻り値のXMLを解析するPHP

<string> 
    <NewDataSet> 
    <DealBlotter> 
     <CustomerReference>161403239</CustomerReference> 
     <Symbol>EUR/USD</Symbol> 
     <BuySell>S</BuySell> 
     <ContractValue>-100000</ContractValue> 
     <Price>1.35070</Price> 
     <CounterValue>-135070</CounterValue> 
     <TradeDate>2011-01-20 22:05:21.690</TradeDate> 
     <ConfirmationNumber>78967117</ConfirmationNumber> 
     <Status>C</Status> 
     <lTID>111913820</lTID> 
    </DealBlotter> 
    </NewDataSet> 
</string> 

今、私はこれにアクセスするには、カール使用していますが、その後 -

$xml = simplexml_load_string($result); 
$dom = new DOMDOcument(); 

// Load your XML as a string 
$dom->loadXML($xml); 

// Create new XPath object 
$xpath = new DOMXpath($dom); 

$res = $xpath->query("/NewDataSet/DealBlotter"); 

foreach($res as $node) 
{ 
    print "i went inside foreach"; 
    $custref = ($node->getElementsByTagName("CustomerReference")->item(0)->nodeValue); 
    print $custref; 
    $ccy = ($node->getElementsByTagName("Symbol")->item(0)->nodeValue); 
    print $ccy; 
    $type = ($node->getElementsByTagName("BuySell")->item(0)->nodeValue); 
    $lots = ($node->getElementsByTagName("ContractValue")->item(0)->nodeValue); 
    $price = ($node->getElementsByTagName("Price")->item(0)->nodeValue); 
    $confnumber = ($node->getElementsByTagName("ConfirmationNumber")->item(0)->nodeValue); 
    $status = ($node->getElementsByTagName("Status")->item(0)->nodeValue); 
    $ltid = ($node->getElementsByTagName("lTID")->item(0)->nodeValue); 
    $time = ($node->getElementsByTagName("TradeDate")->item(0)->nodeValue); 

} 

をしかし、何も印刷されません取得されます。ダミーのステートメントを除きます。 $res = $xpath->query("/string/NewDataSet/DealBlotter");を使用していませんでした。またprint_r($res);も、これを行うと、いくつかの問題がありますが何も

$objDOM = new DOMDocument(); 
$objDOM->load($result); 
$note = $objDOM->getElementsByTagName("DealBlotter"); 
foreach($note as $value) 
{  
    print "hello"; 
    $tasks = $value->getElementsByTagName("Symbol"); 
    $task = (string)$tasks->item(0)->nodeValue; 

    $details = $value->getElementsByTagName("Status"); 
    $detail = (string)$details->item(0)->nodeValue; 

    print "$task :: $detail <br>"; 
} 
+1

なぜあなたは 'simplexml'と' DOMDocument'をロードできますか?それ自身で 'DOMDocument'を使用しているXML? –

+0

これらの課題はすべて大括弧で囲まれているのはなぜですか? – Gordon

+0

@jakenoble:更新された質問を確認してください。 – ayush

答えて

0

を印刷しないDOMNodeList obect.

として出力を提供します。

xmlをどのように読み込んでいますか。 simplexml行を取り除く。それは必要ではなく、物事を台無しにしています。代わりに$dom->loadXml($result);を実行してください。 SimpleXMLを直接ロードしてDomDocumentに直接渡す必要はありません。

クエリでは、/演算子が直接の離散演算子です。それはすぐ隣にあることを意味します。最初のタグはルートにする必要があります。その上にルートを追加しますので、次のいずれか

$res = $xpath->query("/string/NewDataSet/DealBlotter"); 

、または任意のマッチングdecendentを選択//に先頭のスラッシュます

$res = $xpath->query("//NewDataSet/DealBlotter"); 

そして最後に、$resvar_dumpを行うことは、あなたに言うつもりされていませんが多く。代わりに、私はvar_dump($res->length)をやりたいのですが、これは、それがdomnodelist(あなたがすでに知っている)ではなく、いくつのマッチであるかを教えてくれるからです...

+0

私は/ string/NewDataSet/DealBlotterを使用しました。私の完全な質問を見てください。 – ayush

+0

@ayush:私はそれを見ました。しかしそれはまだコードの中にあるので、依然として寄与する問題です。そして私がリストした最初の問題を見ましたか?それを試しましたか?そしてあなたは100%あなたが投稿したXMLである '$ result'を確かめていますか?違いはありませんか? – ircmaxell

+0

はいxmlは同じです。私も$ res = $ xpath-> query( "// NewDataSet")を実行しました。 \t print_r($ res); \t \t print_r($ res-> length);これは印刷されました:DOMNodeList Object()1 – ayush