SimpleXMLElement空对象

时间:2010-05-09 21:15:23

标签: php xml parsing

我正在尝试使用XmlReader解析xml文件,但是由于某些原因我从(佣金)节点的xml文件返回,我也得到了一个空的SimpleXMLElement对象。我不知道它是否与while循环,切换或我在解析设置中遗漏的东西有关。

这是我试图读取的xml文件,因为您可以看到只返回了1个结果:

<?xml version="1.0" encoding="UTF-8"?>
<cj-api>
    <commissions total-matched="1">
        <commission>
            <action-status>
                new
            </action-status>
            <action-type>
                lead
            </action-type>
            <aid>
                10730981
            </aid>
            <commission-id>
                1021015513
            </commission-id>
            <country>
            </country>
            <event-date>
                2010-05-08T08:08:55-0700
            </event-date>
            <locking-date>
                2010-06-10
            </locking-date>
            <order-id>
                345007
            </order-id>
            <original>
                true
            </original>
            <original-action-id>
                787692438
            </original-action-id>
            <posting-date>
                2010-05-08T10:01:22-0700
            </posting-date>
            <website-id>
                3201921
            </website-id>
            <cid>
                2815954
            </cid>
            <advertiser-name>
                SPS EurosportBET
            </advertiser-name>
            <commission-amount>
                0
            </commission-amount>
            <order-discount>
                0
            </order-discount>
            <sid>
                0
            </sid>
            <sale-amount>
                0
            </sale-amount>
        </commission>
    </commissions>
</cj-api>

这是我的解析器:

   <?php

    // read $response (xml feed)
    $file = "datafeed.xml";
    $xml = new XMLReader;

    $xml->open($file);

    // loop to read in data

    while ($xml->read()) {

            switch ($xml->name) {

            // find the parent node for each commission payment
                case 'commission':
            // initalise xml parser
                    $dom = new DomDocument(); 
                    $dom_node = $xml ->expand();
                    $element = $dom->appendChild($dom_node); 
                    $dom_string = $dom->saveXML($element); 
                    $commission = new SimpleXMLElement($dom_string);

                    // read in data

                    $action_status = $commission->{'action-status'};
                    $action_type = $commission->{'action-type'};
                    $aid = $commission->{'aid'};
                    $commission_id = $commission->{'commission-id'};
                    $country = $commission->{'country'};
                    $event_date = $commission->{'event-date'};
                    $locking_date = $commission->{'locking-date'};
                    $order_id = $commission->{'order-id'};
                    $original = $commission->{'original'};
                    $original_action_id = $commission->{'original_action-id'};
                    $posting_date = $commission->{'posting-date'};
                    $website_id = $commission->{'website-id'};
                    $cid = $commission->{'cid'};
                    $advertiser_name = $commission->{'advertiser-name'};
                    $commission_amount = $commission->{'commission-amount'};
                    $order_discount = $commission->{'order-discount'};
                    $sid = $commission->{'sid'};
                    $sale_amount = $commission->{'sale-amount'};


                print_r($aid);
                    break;

            }

    }
    ?>

结果是:

SimpleXMLElement Object ( [0] => 10730981 ) SimpleXMLElement Object ( )

为什么它会返回第二个对象: SimpleXMLElement Object(),我需要做些什么来纠正它?感谢。

1 个答案:

答案 0 :(得分:1)

你打开和关闭标签两次循环。您需要检查nodeType,例如

  if ($xml->name == 'commission' && $xml->nodeType == XMLReader::ELEMENT) {
     // Process the node
  }

我不知道你想通过使用XMLReader,DOM和SimpleXML的混合来实现什么。你为什么不直接使用SimpleXML,比如

   $xml = simplexml_laod_file($file);
   $commission = $xml->commissions[0]->commission[0];
   $aid = $commission->{'aid'};
   print_r($aid);