Intereting Posts
Унаследованные атрибуты Laravel 4 равны нулю кодировка символов запроса fql Как узнать, какой php.ini используется? Инициализация переменных-членов класса с помощью выражений (конкатенированная строка) в PHP $ .ajax используется для объединения ввода из предыдущих полей формы на странице – некоторые проблемы Проверка формы Codeigniter не показывает ошибку и перенаправляет на пустую страницу Проблемы с Twitter-ботом в php? В PHP лучший способ обеспечить текущий рабочий каталог такой же, как скрипт, при использовании CLI UNION SELECT – петля? или один запрос? Конкатенация __DIR__ константа со строкой в ​​виде значения массива, являющегося членом класса в PHP как печатать данные из mysql в pdf-файл, используя php WAMP и mysqli :: real_connect (): (HY000 / 2002)? специальные символы в проблеме «file_exists» (php) Самый быстрый способ узнать Zend Framework? Мой сайт WordPress медленный из-за строки в init.php

Преобразование XML в CSV с помощью PHP

Я использую следующий код для преобразования моего XML-файла в формат CSV. К сожалению, кажется, что не следует распознавать каждую запись в XML и поэтому файл XML заканчивается пустым.

<?php $filexml='test.xml'; if (file_exists($filexml)) { echo 'File Exists'; $xml = simplexml_load_file($filexml); $f = fopen('test.csv', 'w'); foreach ($xml->Item as $item) { fputcsv($f, get_object_vars($item),',','"'); } fclose($f); } ?> 

Пример моего XML-файла ниже …

 <Item MaintenanceType="C"> <HazardousMaterialCode>N</HazardousMaterialCode> <ItemLevelGTIN GTINQualifier="UP">090127000380</ItemLevelGTIN> <PartNumber>0-1848-1</PartNumber> <BrandAAIAID>BBVL</BrandAAIAID> <BrandLabel>Holley</BrandLabel> <PartTerminologyID>5904</PartTerminologyID> <Descriptions> <Description MaintenanceType="C" DescriptionCode="DES" LanguageCode="EN">Street Carburetor</Description> <Description MaintenanceType="C" DescriptionCode="SHO" LanguageCode="EN">Crb</Description> </Descriptions> <Prices> <Pricing MaintenanceType="C" PriceType="JBR"> <PriceSheetNumber>L30779-13</PriceSheetNumber> <CurrencyCode>USD</CurrencyCode> <EffectiveDate>2013-01-01</EffectiveDate> <Price UOM="PE">462.4600</Price> </Pricing> <Pricing MaintenanceType="C" PriceType="RET"> <PriceSheetNumber>L30779-13</PriceSheetNumber> <CurrencyCode>USD</CurrencyCode> <EffectiveDate>2013-01-01</EffectiveDate> <Price UOM="PE">380.5500</Price> </Pricing> <Pricing MaintenanceType="C" PriceType="WD1"> <PriceSheetNumber>L30779-13</PriceSheetNumber> <CurrencyCode>USD</CurrencyCode> <EffectiveDate>2013-01-01</EffectiveDate> <Price UOM="PE">314.4700</Price> </Pricing> </Prices> <ExtendedInformation> <ExtendedProductInformation MaintenanceType="C" EXPICode="CTO" LanguageCode="EN">US</ExtendedProductInformation> <ExtendedProductInformation MaintenanceType="C" EXPICode="NPC" LanguageCode="EN">A</ExtendedProductInformation> <ExtendedProductInformation MaintenanceType="C" EXPICode="HTS" LanguageCode="EN">8409914000</ExtendedProductInformation> <ExtendedProductInformation MaintenanceType="C" EXPICode="NAF" LanguageCode="EN">B</ExtendedProductInformation> </ExtendedInformation> <ProductAttributes> <ProductAttribute MaintenanceType="C" AttributeID="SKU" LanguageCode="EN">BBVL0-1848-1</ProductAttribute> <ProductAttribute MaintenanceType="C" AttributeID="ModDate" LanguageCode="EN">2012-12-31</ProductAttribute> </ProductAttributes> <Packages> <Package MaintenanceType="C"> <PackageLevelGTIN>00090127000380</PackageLevelGTIN> <PackageUOM>EA</PackageUOM> <QuantityofEaches>1</QuantityofEaches> <Dimensions UOM="IN"> <Height>7.5000</Height> <Width>11.0000</Width> <Length>12.2500</Length> </Dimensions> <Weights UOM="PG"> <Weight>13.500</Weight> <DimensionalWeight>6.09</DimensionalWeight> </Weights> </Package> </Packages> </Item> 

Любые идеи, что я сделал не так?

Попробуй это

 $filexml='test.xml'; if (file_exists($filexml)) { $xml = simplexml_load_file($filexml); $f = fopen('test.csv', 'w'); createCsv($xml, $f); fclose($f); } function createCsv($xml,$f) { foreach ($xml->children() as $item) { $hasChild = (count($item->children()) > 0)?true:false; if( ! $hasChild) { $put_arr = array($item->getName(),$item); fputcsv($f, $put_arr ,',','"'); } else { createCsv($item, $f); } } }