このフィードを処理したいとしましょう: 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 タグが不明なフィードを処理できるようにするためです。したがって、ユーザーに deal->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しかし、それは間違いなく最善の方法ではなく、常に機能するとは限りません。
何度やっても出来ませんでした。