SimpleXMLElement boş bir nesne

1 Cevap php

Ben XmlReader kullanarak bir xml dosyasını ayrıştırmak çalışıyorum ama ben boş bir SimpleXMLElement Object alıyorum nedense (komisyon) düğümü xml dosyasından bir getiri alıyorum rağmen de iade ediyorum. Onun bir şey while döngüsü, switch veya ben ayrıştırma kurulumunda cevapsız bir şey yapmak olmadığını bilmiyorum.

Eğer döndü sadece 1 sonuç var gördüğünüz gibi bu, ben okumak için çalışıyorum xml dosyasıdır:

<?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>

Bu benim ayrıştırıcı:

   <?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;

            }

    }
    ?>

Sonuç:

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

Neden ikinci bir nesne döndürüyor: SimpleXMLElement Object ( ) ve ne doğru yapmak gerekir? Teşekkürler.

1 Cevap

Etiket açılış ve kapanış için iki kez döngü isabet vardır. Sen gibi, nodeType kontrol etmeniz gerekir

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

Ben XMLReader, DOM ve SimpleXML bir karışımını kullanarak gerçekleştirmek için çalışıyoruz ne bilmiyorum. Niye sadece gibi, SimpleXML kullanmayın

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