【问题标题】:Convert XML to CSV with PHP使用 PHP 将 XML 转换为 CSV
【发布时间】:2013-06-10 17:25:43
【问题描述】:

我正在使用以下代码将我的 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>

任何想法我做错了什么?

【问题讨论】:

  • 文件是否可写?
  • 是的。我用了一个更简单的例子,它奏效了。 :)
  • 你有没有得到任何错误?还是不正确的 csv 文件?
  • 文件根本没有填充。我没有收到任何错误。
  • 你的答案在这里 :) [在此处输入链接描述][1] [1]:stackoverflow.com/questions/2129001/…

标签: php xml converter


【解决方案1】:

试试这个

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);
        }
    }
}

$filexml = 'test.xml';

if (file_exists($filexml)) {
    $xml = simplexml_load_file($filexml);
    $f = fopen('test.csv', 'w');
    createCsv($xml, $f);
    fclose($f);
}

【讨论】:

  • 可以这样做,但是每个节点都有列?我想获取一个 xml 并将节点类型用作列标题。
猜你喜欢
  • 2017-12-14
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 2017-05-23
  • 2011-10-28
相关资源
最近更新 更多