假设我们要处理这个 Feed:http ://tools.forestview.eu/xmlp/xml_feed.php?aid=1094&cid=1000
我试图以这种方式显示 XML 文件的节点:
deals->deal->dealsite
deals->deal->deal_id
deals->deal->deal_title
这是为了能够处理我们不知道它们的 XML 标记是什么的提要。因此,我们将让用户选择 Deals->deal->deal_title 是 Deal Title 并以这种方式识别它。
我一直在尝试用这段代码来做到这一点:
class HandleXML {
var $root_tag = false;
var $xml_tags = array();
var $keys = array();
function parse_recursive(SimpleXMLElement $element)
{
$get_name = $element->getName();
$children = $element->children(); // get all children
if (empty($this->root_tag)) {
$this->root_tag = $this->root_tag.$get_name;
}
$this->xml_tags[] = $get_name;
// only show children if there are any
if(count($children))
{
foreach($children as $child)
{
$this->parse_recursive($child); // recursion :)
}
}
else {
$key = implode('->', $this->xml_tags);
$this->xml_tags = array();
if (!in_array($key, $this->keys)) {
if (!strstr('>', $key) && count($this->keys) > 0) { $key = $this->root_tag.'->'.$key; }
if (!in_array($key, $this->keys)) {
$this->keys[] = $key;
}
}
}
}
}
$xml = new SimpleXMLElement($feed_url, null, true);
$handle_xml = new HandleXML;
$handle_xml->parse_recursive($xml);
foreach($handle_xml->keys as $key) {
echo $key.'<br />';
}
exit;
但这是我得到的:
deals->deal->dealsite
deals->deal_id
deals->deal_title
请参阅第 2 行和第 3 行的deal->部分丢失。
我也尝试过使用此代码: http: //pastebin.com/FkPWXF64但这绝对不是最好的方法,而且它并不总是有效。
不管多少次我都做不到。