2012-06-29 4 views
0

Правильно, так что это мой первый день с использованием XML. Я не создаю XML, кто-то отправляет мне URL-адрес, и мне нужно что-то делать с ним с помощью PHP. Это то, что структура XML выглядит следующим образом:Доступ к данным из XML

<response> 
<query id="1"> 
<results> 
    <item> 
     <id>GZ7w39jpqwo</id> 
     <rank>1</rank> 
     <explanation>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla a massa lectus, sed convallis sapien. Curabitur sem mauris, ullamcorper ut. </explanation> 
    </item> 
    <item> 
     <id>hfMNRUAwLVM</id> 
     <rank>2</rank> 
     <explanation>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla a massa lectus, sed convallis sapien. Curabitur sem mauris, ullamcorper ut. </explanation> 
    </item> 
    <item> 
     <id>I_cxElavpS8</id> 
     <rank>3</rank> 
     <explanation>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla a massa lectus, sed convallis sapien. Curabitur sem mauris, ullamcorper ut. </explanation> 
    </item> 
</results> 
</query> 
</response> 

Так что, да, это то, что я понял, до сих пор ...

$url = "http://www.MyURL.blah"; 

$string = file_get_contents($url); 

$xml = simplexml_load_string($string); 

echo $xml->getName(); 

Это перекликается слово «ответ». Да, пойди! Итак, как, черт возьми, вы получаете идентификатор, ранг и объяснение каждого элемента? Я опубликовал только 3 пункта выше. Там на самом деле будет около 50.

+0

Почему это не работает: $ string = file_get_contents ($ url); $ xml = simplexml_load_string ($ string); foreach ($ xml as $ row) { echo $ row-> rank. '
'; } – AzzyDude

ответ

0

Этот пример может помочь вам, используя DOMDocument.

$document = new DOMDocument(); //Creates a new DOM Document (used to process XML) 
$document->loadXML($fileContents); //Load the XML file from an string 
$resultsNode = $document->getElementsByTagName("results")->item(0); //Get the node with the results tag 
foreach($resultsNode->childNodes as $itemNode) //Get each child node (item) and process it 
{ 
    foreach($itemNode->childNodes as $unknownNode) //Get each child node of item and process it 
    { 
     if($unknownNode->nodeName == "id") //Check if it's the dessired node 
     { 
      $this->id = $unknownNode->value; //Assign the value of the node to a variable 
     } 
     if($unknownNode->nodeName == "rank") 
     { 
      $this->rank = $unknownNode->value; 
     } 
     if($unknownNode->nodeName == "explanation") 
     { 
      $this->explanation = $unknownNode->value; 
     } 
    } 
} 
+0

... Я понятия не имею, что происходит в этом коде. – AzzyDude

+0

@AzzyDude Исправлено в соответствии с вашими требованиями – Rafael

0
foreach($xml->xpath('/results')->children() as $child) 
{ 
    $mystuff = $child->getChildren(); 
    $id = $mystuff[0]; 
    $rank = $mystuff[1]; 
    $explanation = $mystuff[2]; 
} 

Что-то в этом роде. См. Документы PHP для SimpleXMLElement object

Смежные вопросы