2017-02-26 116 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": "" 
    }, 
    ...