2015-08-24 2 views
1

ниже является частью моего XML, где я пытаюсь получить данные, в основном мне нужно вставить их в массив, где «роль» является ключевым, а «entry» - значением.Получить данные из XML с PHP

Вот XML:

<CommunicationDetailList> 
    <CommunicationDetail> 
    <Role>Phone1</Role> 
    <Entry>727831333</Entry> 
    </CommunicationDetail> 
    <CommunicationDetail> 
    <Role>Mobile</Role> 
    <Entry>727834125</Entry> 
    </CommunicationDetail> 
    <CommunicationDetail> 
    <Role>Fax1</Role> 
    <Entry>123456789</Entry> 
    </CommunicationDetail> 
    <CommunicationDetail> 
    <Role>EMail1</Role> 
    <Entry>[email protected]</Entry> 
</CommunicationDetail>        
</CommunicationDetailList>    

Это мой PHP код, Unfotunately он не работает правильно (добавить только первый не остальное, поэтому у меня есть доступ только к PHONE1):

 //this is somewhere on top of my code 
     $doc = new DOMDocument(); 

     //Load XML to DOM 
     $doc->loadXml($xml); 
     . 
     . 
     // here I parse rest of XML, where `<tags>` are unique 
     . 
     . 
     //and here is that important part 
     $communicationDetails = $doc->getElementsByTagName("CommunicationDetailList"); 
     foreach($communicationDetails as $detail) 
     { 
      $keys = $detail->getElementsByTagName("Role"); 
      $key = $keys->item(0)->nodeValue; 

      $values = $detail->getElementsByTagName("Entry"); 
      $value = $values->item(0)->nodeValue; 

      //adding login and password to array    
      $data[$key] = $value; 

     } 

Может кто-то помочь мне получить доступ к этому XML

+0

_ «Unfotunately он не работает правильно» _ И почему он не правильно работает? Какие ошибки вы получаете? Проделали ли вы некоторую отладку, чтобы найти место возникновения ошибки? – Epodax

+0

Привет @Epodax Я верю, что мы просто скучаем по другому, я редактировал вопрос, ответ на него находится в скобке, так что: Нет ошибки, но только первый ключ + значение добавляется в массив. – Andurit

ответ

0

Попробуйте это может быть, это поможет

foreach($communicationDetails as $detail) 
{ 
    $keys = $detail->getElementsByTagName("Role"); 
    $values = $detail->getElementsByTagName("Entry"); 
    $length = $keys->length; 
     for($i = 0; $i <= $length; $i++) 
     { 
      $key = $keys->item($i)->nodeValue; 
      $value = $values->item($i)->nodeValue; 
      $data[$key] = $value; 
     } 
} 
0

проблема с

$item(0) 

Если вы должны были использовать повторный цикл, как

for ($i=0; $i<count($keys); $i++) { echo $keys[$i]; } 

Тогда было бы пройти через весь массив.

2

Попробуйте использовать SimpleXMLElement как этот

<?php 

$xml = 'data.xml'; 
//load xml from file 
$doc = simplexml_load_file($xml); 

// or load from string 
// $doc = simplexml_load_string($xmlString); 

foreach($doc->CommunicationDetail as $detail){ 

    //print $detail->Role . ' - ' . $detail->Entry . PHP_EOL; 

    $data[(string)$detail->Role] = (string)$detail->Entry; 
    // we cast the xml elements as strings to be used as keys and values in the array 
} 

print_r($data); 

//output is 
Array 
(
    [Phone1] => 727831333 
    [Mobile] => 727834125 
    [Fax1] => 123456789 
    [EMail1] => [email protected] 
) 
+0

Эй, @Alex Андрей, спасибо за совет, я даю вам толчок для этого приятного решения. Однако мне нужно использовать DOM для некоторых других целей. – Andurit

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