2012-06-28 2 views
1

Таким образом, у меня есть XML в следующем формате, который я читаю из файла «» test.xmlXML с различным количеством дочерних узлов для каждого родительского узла

<XML> 
<Agent ID="ABC123"> 
    <Property> 
     <Code>XYZ</Code> 
     <Name>Hotel 1</Name> 
    </Property> 
    <Property> 
     <Code>237</Code> 
     <Name>Hotel 2</Name> 
    </Property> 
    <Property> 
     <Code>213</Code> 
     <Name>Hotel 3</Name> 
    </Property> 
</Agent> 
<Agent ID="DEF456"> 
    <Property> 
     <Code>333</Code> 
     <Name>Hotel 4</Name> 
    </Property> 
    <Property> 
     <Code>23423</Code> 
     <Name>Hotel 5</Name> 
    </Property> 
</Agent> 
<Agent ID="GHI789"> 
    <Property> 
     <Code>45345</Code> 
     <Name>Hotel 6</Name> 
    </Property> 
</Agent> 
</XML> 

Я хочу, чтобы иметь возможность выводить выше в следующий формат:

Agent | Code | Name 
ABC123 | XYZ | Hotel 1 
ABC123 | 237 | Hotel 2 
...... 

Как бы я это делать, поскольку есть несколько агентов и варьируя количество свойств в пределах каждого агента?

У меня есть опыт использования XMLReader, но с удовольствием попробую альтернативу, такую ​​как SimpleXML.

Думаю, мне понадобится использовать цикл Foreach на этом (Foreach Agent ....), но не совсем уверен, с чего начать.

Спасибо!

ответ

3

Посмотрите на это:

$sxe = new SimpleXMLElement($xmlstr); 

echo 'Agent | Code | Name'.PHP_EOL; 
foreach ($sxe->Agent as $agent) 
{ 
    $attr = $agent->attributes(); 

    foreach ($agent->Property as $property) 
    { 
     echo $attr['ID'].' | '.$property->Code.' | '.$property->Name.PHP_EOL;  
    } 
} 
+0

Круто, спасибо, я использую это для загрузки XML из файла: ** $ xmlstr = simplexml_load_file ("test.xml"); ** но получение error ** Начальный тег ожидается, '<' не найден в ... **. Есть идеи? XML-файл в определенном файле – Franco

+0

Я скопирую первый XML-код в новый файл и попробую '$ xmlstr = simplexml_load_file (" test.xml "); var_dump ($ xmlstr); 'и все в порядке, я получил правильный объект SimleXML. –