2011-02-06 3 views
3

Как получить все дочерние узлы «seat» и их атрибуты из этого 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> 

У меня есть разная карта мест, поэтому я хочу, чтобы получить их, запрашивая с ID затем присваивающим все седалищем "узлы и их атрибуты переменными.

Я использую методы DOM до сих пор, но, возможно, простой XML или XPath был бы проще, так как его действительно сбивает с толку, когда вы переходите из DOMDocumet, DOMElement, DOMNode.

Любая помощь будет отличной, приветствия!

ответ

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

Cooper @ Тим как можно вы передаете xml-файл классу simplexmlelement? – RIK

1

легко можно сделать с помощью DOM:

$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'); 
} 
Смежные вопросы