2017-02-26 111 views
1

我在這裏有XML http://xml.tab.co.nz/odds/2017-02-08 我想從會議節點檢索'number'屬性,從競賽節點檢索'number'屬性和從入口節點檢索'win'屬性。 他們應該依賴提取手段 會議2比賽1然後所有贏得它的屬性。會議2比賽2然後所有贏得它的屬性。 等。 我已經嘗試過這種從XML屬性提取數據

$xmlDoc = new DOMDocument(); 
$xmlDoc->load('http://xml.tab.co.nz/odds/2017-02-08'); 

$searchNode2 = $xmlDoc->getElementsByTagName("meeting"); 

foreach($searchNode2 as $searchNode2) 
{ 
    $valueID2 = $searchNode2->getAttribute('number'); 
    $meetings[$k]=$valueID2; 
    $k++; 
    //echo "$valueID2\n"; 
} 

$searchNode1 = $xmlDoc->getElementsByTagName("race"); 

foreach($searchNode1 as $searchNode1) 
{ 
    $valueID1 = $searchNode1->getAttribute('number'); 
    $races[$j]=$valueID1; 
    $j++; 
    //echo "$valueID1\n"; 
} 

$searchNode = $xmlDoc->getElementsByTagName("entry"); 

foreach($searchNode as $searchNode) 
{ 
    $valueID = $searchNode->getAttribute('win'); 
    $runners[$i]=$valueID; 
    $i++; 
    //echo "$valueID\n"; 
} 

,但是每一件事情都是獨立的,不能弄清楚如何做到這一點。

+0

的可能的複製[PHP將XML轉換爲JSON](http://stackoverflow.com/questions/8830599/php-convert-xml-to-json) – carmine

+0

我不想將整個XML轉換爲JSON。只是它的一個特定部分供進一步使用。 –

+0

你能顯示想要的輸出嗎? – Parfait

回答

0

考慮的SimpleXMLElement的XPath,走在XML更新你編碼底進JSON雙級陣列中的每個樹級別:

// Loading XML source 
$xml = simplexml_load_file('http://xml.tab.co.nz/odds/2017-02-08'); 

// Initializing variables 
$i = 0; 
$data = []; 

// Extracting values 
foreach ($xml->xpath("//meeting") as $mtg){      
    foreach ($mtg->xpath("races") as $races) { 
     foreach ($races->xpath("race") as $race) { 
     foreach ($race->xpath("entries") as $entries) { 
      foreach ($entries->xpath("entry") as $entry) { 
       $data[$i]['meeting'] = (string)$mtg->xpath("@number")[0]; 
       $data[$i]['races'] = (string)$race->xpath("@number")[0]; 

       $win = 'win-'.(string)$entry->xpath("@number")[0]; 
       if ($entry->xpath("@win")) { 
        $data[$i][$win] = (string)$entry->xpath("@win")[0]; 
       } else { 
        $data[$i][$win] = ''; 
       } 
      } 
      $i++;  
     }    
     } 
    } 
} 

// Encode json and export to external file 
$json = json_encode($data, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES); 
echo $json; 

file_put_contents('Output.json", $json); 

輸出

[ 
    { 
     "meeting": "2", 
     "races": "1", 
     "win-1": "8.90", 
     "win-2": "14.70", 
     "win-3": "2.80", 
     "win-4": "54.80", 
     "win-5": "13.10", 
     "win-6": "7.10", 
     "win-7": "13.30", 
     "win-8": "8.60", 
     "win-9": "4.40" 
    }, 
    { 
     "meeting": "2", 
     "races": "2", 
     "win-1": "5.50", 
     "win-2": "6.10", 
     "win-3": "6.80", 
     "win-4": "4.80", 
     "win-5": "14.70", 
     "win-6": "4.20", 
     "win-7": "35.00", 
     "win-8": "12.40", 
     "win-9": "28.00", 
     "win-10": "23.50" 
    }, 
    { 
     "meeting": "2", 
     "races": "3", 
     "win-1": "8.70", 
     "win-2": "9.10", 
     "win-3": "13.70", 
     "win-4": "1.70", 
     "win-5": "17.00", 
     "win-6": "11.70", 
     "win-7": "5.30", 
     "win-8": "" 
    }, 
    ...