PHP - 解析XML一行记录

时间:2013-12-02 09:50:17

标签: php xml csv

我有以下问题。我有一个XML文件,其结构如下:

<?xml version="1.0" encoding="utf-8"?>
<Stocproduse>
<record ProdusId="1622" Stoc="11.00"/>
<record ProdusId="1632" Stoc="11.00"/>
</Stocproduse>

我正在尝试使用以下PHP脚本将数据插入到csv文件中,但它不起作用:

$filexml='/var/www/html/site.com/Stoc_produse.xml';
$xml = simplexml_load_file($filexml);
$f = fopen('/var/www/html/site.com/stoc_produse.csv', 'w');
foreach($xml->record as $record){
$values = array("ProdusId" => $record->ProdusId, "Stoc" => $record->Stoc);
    fputcsv($f, $values,','," ");
}
fclose($f);

但是,如果我按以下方式转换XML结构,它可以工作:

<?xml version="1.0" encoding="utf-8"?>
<Stocproduse>
<record>
<ProdusId>1622</ProdusId>
<Stoc>11.00</Stoc>
</record>
<record>
<ProdusId>1623</ProdusId>
<Stoc>11.00</Stoc>
</record>
</Stocproduse>

有没有人知道我应该对php脚本进行哪些修改才能使它与第一个xml结构一起使用? 任何帮助将不胜感激。

谢谢。

3 个答案:

答案 0 :(得分:1)

您需要从SimpleXmlElement属性中获取数据。

检查以下内容:PHP SimpleXmlElement Attributes

答案 1 :(得分:1)

尝试使用

$xml->record[0]->attributes()

而不是

$xml->record

要了解它,请点击here

答案 2 :(得分:0)

您可以通过以下两种方式之一访问XML节点元素:

  1. 前面提到的PHP SimpleXmlElement Attributes function;
  2. 使用['']直接访问。
  3. 由于第一种方法有很多例子,我给你留下了第二种方法的实例:

    <?php
    $xml = <<<XML
    <?xml version="1.0" encoding="utf-8"?>
    <Stocproduse>
        <record ProdusId="1622" Stoc="11.00"/>
        <record ProdusId="1632" Stoc="11.00"/>
    </Stocproduse>
    XML;
    
    $sxe = new SimpleXMLElement($xml);
    
    foreach($sxe->record as $record){
        $values = array("ProdusId" => $record['ProdusId'], "Stoc" => $record['Stoc']);
    }
    
    print_r($values);
    

    输出:

    Array
    (
        [ProdusId] => SimpleXMLElement Object
        (
            [0] => 1632
        )
    
        [Stoc] => SimpleXMLElement Object
        (
            [0] => 11.00
        )
    )