首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SimpleXML数据处理

SimpleXML数据处理
EN

Stack Overflow用户
提问于 2011-08-31 21:57:30
回答 2查看 573关注 0票数 0

我即将完成一个脚本,该脚本使用simplexml处理一些数据,但我被困在了最后。

嗯,不是卡住了,而是好奇和卡住了。

$tmp包含我的XML (大约750k),目标是将其转换为fputcsv (父数组,每行包含一个数组)的格式。

下面的代码行得通,但我并没有使用fputcsv并将其发送回用户,而是使用fputcsv创建了一个干净的数组,这是写CSV文件所不需要的大量开销,这无疑会给fputcsv带来问题。我已经将输出清理为几个标题列和几行,但实际上有20列和数百行。无论如何,在fputcsv之前进行清理?

代码语言:javascript
复制
        // Process XML response into arrays for fputcsv
        $csv = array();
        $xml = simplexml_load_string($tmp);

        // Create array and loop each column for header row
        $header_row = array();
        foreach ($xml->RESPONSE->DATA->HEADER->COLUMN as $column) {
            $header_row[] = $column;
        }
        $csv[] = $header_row;

        // Create array and loop each column for header row

        foreach ($xml->RESPONSE->DATA->ROW as $row) {
            $data_row = array();
            foreach ($row->COLUMN as $datacolvalue){
                $data_row[] = $datacolvalue;
            }
            $csv[] = $data_row;
            unset($data_row);
        }

        // Output var to check for accuracy (later add fputcsv)
        var_dump($csv);

输出(如果需要,print_r- can var_dump ):

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [0] => date
                )

            [1] => SimpleXMLElement Object
                (
                    [0] => name
                )
)

    [1] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [data_type] => text
                        )

                    [0] => Aug 01, 2011
                )

            [1] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [data_type] => text
                            [id] => 8699636
                        )

                    [0] => bfxgbfgxbfbgxfsfsdf
                )

        )

        [2] => Array

        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [data_type] => text
                        )

                    [0] => Aug 01, 2011
                )

            [1] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [data_type] => text
                            [id] => 8699694
                        )

                    [0] => bfxgbfgxbfbgxf
                )

        )
)

所需的输出(针对每个额外的列进行推断并删除@attributes):

代码语言:javascript
复制
array(
array("date","name"),
array("Aug 01, 2011","bfxgbfgxbfbgxfsfsdf"),
array("Aug 01, 2011","bfxgbfgxbfbgxf")
)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-31 23:28:01

回答我自己的问题,因为我可能没有很好地解释它,但是指定一个(字符串)将我带到我需要的地方。

票数 0
EN

Stack Overflow用户

发布于 2011-08-31 22:11:44

试着改变

代码语言:javascript
复制
foreach ($xml->RESPONSE->DATA->HEADER->COLUMN as $column) {

代码语言:javascript
复制
$columns = (array)$xml->RESPONSE->DATA->HEADER->COLUMN;
foreach ($columns as $column) {

这应该会将SimpleXML对象转换为简单的数组。这应该会消除“开销”。对foreach ($row->COLUMN as $datacolvalue){执行相同的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7258011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档