2016-10-19 6 views
0

を使用して、子のXML子を得ることができない、私は以下のようなxmlファイルを持っていると言う:はしますcurl_setopt

<objectlist> 
    <objectcode>OP#0003</objectcode> 
    <objectid>0001</objectid> 
    <objecttype>Test object</objecttype> 
    <object> 
     <info> 
      <id>001</id> 
      <name>Some name</name> 
      <value>5</value> 
     </info> 
     <properties> 
      <shopdetails> 
       <desciption> 
        <header>Test</header> 
        <text>This is some text about the object</text> 
       </desciption> 
       <price>4</price> 
       <currency>Dollar</currency> 
       <weight>500</weight> 
       <gramSymbol>mg</gramSymbol> 
      </shopdetails> 
     </properties> 
    </object> 
</objectlist> 

にはどうすれcurl_setopt()を使用して、このXMLファイルからすべての情報を得るのですか?私はforeachループで試しましたが、失敗しました。それは、オブジェクトコード、オブジェクトID、およびオブジェクトタイプからの情報のみを取得します。 私のスクリプトは、ルートの子ノードからのみ情報を取得できますが、子ノードの子は取得できません。私は私のプロジェクトのためにこのスクリプトを使用:

<?php 
Class xmlObject{  
    public function xml_From_URL() { 
     require_once 'dbconnect.php'; 
     $config[CURLOPT_URL] = "http://localhost/example.xml"; 
     $config[CURLOPT_VERBOSE] = 0; 
     $config[CURLOPT_SSLVERSION] = 3; 
     $config[CURLOPT_SSL_VERIFYPEER] = FALSE; 
     $config[CURLOPT_SSL_VERIFYHOST] = 2; 
     $config[CURLOPT_FOLLOWLOCATION] = 0; 
     $config[CURLOPT_HEADER] = 0; 
     $config[CURLOPT_RETURNTRANSFER] = 1; 
      //-- config section --// 
     $tuCurl = curl_init(); 
     curl_setopt_array($tuCurl, $config); 
     $data = curl_exec($tuCurl); 
     $xml = simplexml_load_string($data); 
      //-- Loops --// 
       //-- 1 --// 
     foreach($xml -> object as $row){ 
      $id = $row -> id; 
      $name = $row -> name; 
      $value = $row -> value; 
      echo("<b>Objects</b></br>"); 
      echo($id."<br>"); 
      echo($name."<br>"); 
      echo($value."<br>"); 
     } 
       //-- 2 --// 
     foreach ($xml -> description as $row) { 
      $header = $row -> header; 
      $text = $row -> text; 
      echo("<b>description</b><br>"); 
      echo($header); 
      echo($text); 
     } 
       //-- 3 --// 
     foreach ($xml -> shopdetails as $row) { 
      $header = $row -> price; 
      $text = $row -> currency; 
      $weight = $row -> weight; 
      $gramsymbol = $row -> gramsymbol;  
      echo("<b>description</b><br>"); 
      echo($header); 
      echo($text); 
     } 
     curl_close($tuCurl); 
    } 
} 
?> 

答えて

0

は、あなただけのXMLデータを解析し、あなたのPHPコードを更新する必要がある - XMLデータのみを提供し、カール、それを解析しません。 simplexml_load_string()を使用してSimpleXMLElementを作成しています。あなたはちょっと違ってプロパティにアクセスする必要があります。代わりに、このよう$rowからidにアクセスする

我々は <object><id>の間のノードにアクセスする必要が
$id = $row->id; 

- すなわち<info>

$id = $row->info->id; 

し、同様に他の特性のために。また、の呼び出しの直後にcurl_close($tuCurl);を移動することもできます。これは、cURLがXMLデータを解析していないためです。これはphpFiddle exampleに実際には(cURLでデータを取得せずに)見ることができます。詳細については、PHP documentation for SimpleXML elements on PHP.net

<?php 
Class xmlObject{  
    public function xml_From_URL() { 
     require_once 'dbconnect.php'; 
     $config[CURLOPT_URL] = "http://localhost/example.xml"; 
     $config[CURLOPT_VERBOSE] = 0; 
     $config[CURLOPT_SSLVERSION] = 3; 
     $config[CURLOPT_SSL_VERIFYPEER] = FALSE; 
     $config[CURLOPT_SSL_VERIFYHOST] = 2; 
     $config[CURLOPT_FOLLOWLOCATION] = 0; 
     $config[CURLOPT_HEADER] = 0; 
     $config[CURLOPT_RETURNTRANSFER] = 1; 
     //-- config section --// 
     $tuCurl = curl_init(); 
     curl_setopt_array($tuCurl, $config); 
     $data = curl_exec($tuCurl); 

     //now that we have set $data, we can close the cURL request 
     curl_close($tuCurl); 

     $xml = simplexml_load_string($data); 

     foreach($xml -> object as $row){ 
      //access these properties from the info childnode 
      $id = $row->info->id; 
      $name = $row->info->name; 
      $value = $row->info->value; 
      echo("<b>Objects</b></br>"); 
      echo($id."<br>"); 
      echo($name."<br>"); 
      echo($value."<br>"); 
      //access these properties using the properties childnode 
      $header = $row->properties->shopdetails->desciption->header; 
      $text = $row->properties->shopdetails->desciption->text; 
      echo("<b>description</b><br>"); 
      echo($header."<br>"); 
      echo($text."<br>"); 
     } 
    } 
} 
?> 
+0

実際のスクリプトで働いてくれてありがとうございました。 – AutomataGeek

関連する問題