2016-08-02 15 views
0

JSONの使用に慣れていて、DOMと少し違っているようです。ここに示した3よりも多くあります。出力DOM with PHP

<item> 
    <ItemID> </ItemID> 
    <Title> </Title> 
</item> 
<item> 
    <ItemID> </ItemID> 
    <Title> </Title> 
</item> 
<item> 
    <ItemID> </ItemID> 
    <Title> </Title> 
</item> 

これは私が使用しようとしていますコードです:

$response = curl_exec($connection); 
curl_close($connection); 

$dom = new DOMDocument(); 
$dom->loadXML($response); 

$items = $dom->getElementsByTagName("item"); 

foreach($items as $mydata) { 
    $id = $mydata->getElementsByTagName('ItemID'); 
    $title = $mydata->getElementsByTagName('Title'); 
echo $id; 
echo $title; 

} 

主にDBにこれらの値を入力したいです。だから何かのように:

$query .= "INSERT INTO `$table` "."(id, title) ......... 

私はちょうどDOMのIDとタイトルを引き出すように見えることはできません。

+1

大文字と小文字が区別される可能性があります。したがって、 '$ items = $ dom-> getElementsByTagName(" Item ");'を '$ items = $ dom-> getElementsByTagName(" item ");' –

+0

に変更してください。私はこれをすぐに書きました。それはタイプミスでした。私の実際のコードでは問題ではありません。 –

答えて

0

最初のエラーは大文字と小文字の区別を無視しています。タグは、提供されたxmlと同じケースを持つ必要があります。

第2のエラー - getElementsByTagNameは、要素のコレクションであるDOMNodeListを返します。だから、それを反復するか、item()メソッドを使用してください。

$dom = new DOMDocument(); 
$dom->loadXML($response); 

$items = $dom->getElementsByTagName("item"); // not `Item` 

foreach ($items as $mydata) { 
    $id = $mydata->getElementsByTagName('ItemID'); // not `ItemId` 
    $title = $mydata->getElementsByTagName('Title'); 

    // get first element of each collection 
    echo $id->item(0)->nodeValue; 
    echo $title->item(0)->nodeValue; 
} 
+0

情報を文字列に保存するにはどのようなルートが最適でしょうか?だからこのタイトルと言う。 $ id = $ mydata-> getElementsByTagName( 'item') - > item(0) - > nodeValue;を実行できますか?このようにして、私は$ idをエコーすることができます。 ?? –

0
$id = $mydata->getElementsByTagName('ItemID')->item(0)->nodeValue; 

追加 - >アイテム(0) - >のnodeValue。最後にトリックをした!私はそれを一緒に置くのを助けてくれてありがとう!

ブライアン