SimpleXMLElement empty object
Posted
by Mike
on Stack Overflow
See other posts from Stack Overflow
or by Mike
Published on 2010-05-09T21:15:22Z
Indexed on
2010/05/09
22:18 UTC
Read the original article
Hit count: 219
Hi,
I am trying to parse an xml file using XmlReader but although I am getting a return from the xml file for the (commission) node for some reason I am getting an empty SimpleXMLElement Object returned as well. I don't know if its something to do with while loop,switch or something I missed in the parse setup.
This is the xml file I am trying to read from, as you can see there is only 1 result returned:
<?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>
This is my parser:
<?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;
}
}
?>
The result is :
SimpleXMLElement Object ( [0] => 10730981 ) SimpleXMLElement Object ( )
Why is it returning the second object: SimpleXMLElement Object ( ) and what do I need to do correct it? Thanks.
© Stack Overflow or respective owner