我正在尝试使用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(),我需要做些什么来纠正它?感谢。
答案 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);