2011-02-06 10 views
3

このXMLファイルからすべての「シート」子ノードとその属性を取得するにはどうすればよいですか?PHP、XML - 子ノードとその属性の取得

<seatmap id="1"> 
     <seat row="A" seatnum="01" available="1" /> 
     <seat row="A" seatnum="02" available="1" /> 
     <seat row="A" seatnum="03" available="1" /> 
     <seat row="A" seatnum="04" available="1" /> 
     <seat row="A" seatnum="05" available="1" /> 
    </seatmap> 

私は別のseatmapsを持っているので、私はその後、変数へのすべての「シート」ノードとその属性を割り当てるID で照会することによって、それらを取得したいです。

これまでDOMメソッドを使用していましたが、DOMDocumet、DOMElement、DOMNodeからドリルダウンするときに、実際には が混乱するので、simpleXMLまたはXPathが簡単になることがあります。

何か助けがよかったです、歓声!簡単にDOMで行うことができます

答えて

4
$XML = <<<XML 
<parent> 
    <seatmap id="1"> 
     <seat row="A" seatnum="01" available="1" /> 
     <seat row="A" seatnum="02" available="1" /> 
     <seat row="A" seatnum="03" available="1" /> 
     <seat row="A" seatnum="04" available="1" /> 
     <seat row="A" seatnum="05" available="1" /> 
    </seatmap> 
</parent> 
XML; 

$xml_nodes = new SimpleXMLElement($XML); 

$nodes = $xml_nodes->xpath('//seatmap[@id = "1"]/seat'); // Replace the ID value with whatever seatmap id you're trying to access 

foreach($nodes as $seat) 
{ 
    // You can then access: $seat['row'], $seat['seatnum'], $seat['available'] 
} 
+0

が唯一の仕事は 'seatmap'はとにかく最初のレベルのノードですが、1されます:) – netcoder

+0

@netcoder:固定 –

+0

@Timクーパーどのようにすることができますxmlファイルをsimplexmlelementクラスに渡しますか? – RIK

1

$dom = new DOMDocument; 
$dom->load('xmlfile.xml'); 
$xpath = new DOMXPath($dom); 

$seats = $xpath->query('//seatmap[@id="1"]/seat'); 
if ($seats->length) { 
    foreach ($seats as $seat) { 
     echo "row: ".$seat->getAttribute('row').PHP_EOL; 
     echo "seatnum: ".$seat->getAttribute('seatnum').PHP_EOL; 
     echo "available: ".$seat->getAttribute('available').PHP_EOL; 
    } 
} else { 
    die('seatmap not found or is empty'); 
}