2013-06-28 6 views
0

Я застрял здесь с этой проблемой. У меня есть файл XML, который выглядит следующим образом:XML simplexml_load_file foreach not looping

<?xml version="1.0" encoding="UTF-8"?> 
<ListVehicleInventory xmlns="http://www.starstandards.org/STAR" 
xmlns:oa="http://www.openapplications.org/oagis" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.starstandards.org/STAR/STAR/Rev1.1/BODs/ListVehicleInventory.xsd" revision="1.0" release="8.1" environment="Production" lang="en-US"> 
<ApplicationArea> 
    <Sender> 
     <Component>XPO</Component> 
     <Task>VehicleInventory</Task> 
     <CreatorNameCode>AUTO123</CreatorNameCode> 
     <SenderNameCode>XPO</SenderNameCode> 
     <Language>eng</Language> 
    </Sender> 
    <CreationDateTime>2013-04-26T00:16:49-0400</CreationDateTime> 
    <BODId>2013042601</BODId> 
    <Destination> 
     <DestinationNameCode>CBB</DestinationNameCode> 
    </Destination> 
    </ApplicationArea> 
    <DataArea> 
    <VehicleInventory> 
     <Header> 
     <TransactionType>Delete</TransactionType> 
     </Header> 
     <Invoice> 
     <Vehicle> 
      <ModelYear>2011</ModelYear> 
      <Make>Dodge</Make> 

...

DataArea как вся информация транспортного средства Inventory, что я хочу, чтобы вытащить. Я пытаюсь получить foreach, но он найдет только атрибуты VehicleInventory и не перейдет через foreach ко всем данным в файле. У меня есть 3 dataInventory в моем XML для этого тестирования.

Вот мое фактическое кодирование:

$xml = simplexml_load_file($xmlDir . DIRECTORY_SEPARATOR . 'test.xml'); 
foreach($xml as $vehicle): 
echo '<pre>'; 
print_r($vehicle->VehicleInventory->Invoice->Vehicle); 
echo '</pre>'; 
endforeach; 

Результат: показывает мне всю информацию для 1-го VehicleINventory но doens't петли. Что не так?

+0

http://php.net/simplexml.examples-basic – hakre

ответ

1

Петля должна быть:

foreach($xml->DataArea->VehicleInventory as $vehicle) 
{ 
    print_r($vehicle->Invoice->Vehicle); 
} 

Ваш исходный код зацикливается над $xml. Проблема с этим - SimpleXML помещает корневой узел в $xml, поэтому в вашем случае $xml - <ListVehicleInventory>.

Codepad Demo

+0

ОК, это помогает немного, но я не могу, кажется, цикл в любом случае. DataArea приходит только один раз в моем XML, если я его использую, я не буду зацикливаться более одного раза? – maphaneuf

+0

Это не проблема, посмотрите на демо. Этот код пересекает «VehicleInventory». Как вы можете видеть, демо выйдет Dodge, Ford, Aston Martin. – MrCode

+0

OH, я вижу, что сейчас он работает. – maphaneuf