看板 Flash 關於我們 聯絡資訊
演算法簡介: find(節點 , 標籤) { if(節點名稱不是標籤) { if(節點有孩子) 結果節點 = find(孩子節點 , 標籤) if(節點有兄弟) 結果節點 = find(兄弟節點 , 標籤) if(結果節點不是 null) return 結果節點 else return null } else return 節點 } 可以說是用DFS(深度優先搜尋法)的概念 AS程式碼: //找body function find(thisNode , tagName) { var Node:XMLNode; if(thisNode.nodeName != tagName) { if(thisNode.firstChild != null) Node = find(thisNode.firstChild,tagName); if(thisNode.nextSibling != null) Node = find(thisNode.nextSibling,tagName); if(Node != null) return Node; else return null; } else return thisNode; } 實際用法: //建立一XML,並擷取某網站中body部分的資料 var myHTML:XML = new XML(); myHTML.ignoreWhite = true; myHTML.onLoad = function(success) { var myXML:XML = find(this,"body"); } var url = "http://tw.yahoo.com/" myHTML.load(url); 功能: 1.分析HTML,從外部網站擷取資料 2.可以作巢狀擷取 舉例: 1.可以做到網路蜘蛛的功能 (找到 a 標籤,再查他的 href 去 load 找到的 url) 2.如果搜尋的不是節點名稱,而是節點中所有屬性的值 則可能從氣象局擷取某地氣溫資料,或其他網站中的資料 本篇文章重點: 1.HTML可以當成XML來讀取 2.從外部網站擷取資料的方法 -- blog:http://etrex.blogspot.com/ site:http://web.ntust.edu.tw/~B9409041/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.120.112.85 ※ 編輯: etrexetrex 來自: 122.120.112.85 (04/23 20:53) ※ 編輯: etrexetrex 來自: 122.120.112.85 (04/23 20:54)
etrexetrex:缺點:只會找到一個node 04/23 20:57
Jerrynet:如果那個html網頁不是巢狀結構的話~~~XD 04/23 20:58
etrexetrex:只要有一個node 當起點,就能走完所有的node 吧? 04/23 21:00
etrexetrex:因為他會同時往下跟往旁邊走 不用考慮多個_root問題吧 04/23 21:01
Jerrynet:我是說html不一定是巢狀結構啊, ex: <b><i>test</b></i> 04/23 21:04
etrexetrex:這是什麼鬼 這樣的HTML能顯示喔= =? 04/23 21:04
Jerrynet:還有遇到<!-- -->這種標籤就..... 04/23 21:04
Jerrynet:可以顯示啊,只是這不符合W3C的標準 04/23 21:05
etrexetrex:阿 會爆炸嗎? 我沒試過那個 04/23 21:05
Jerrynet:<!-- 這種註解標籤我也沒試XD 04/23 21:06
etrexetrex:晚點來試試 04/23 21:07
scars:不符合標準巢狀的HTML是有可能出現的 而且遇到<br>的話.. 04/23 22:16
Jerrynet:<br>沒關係,xml可以用單標籤喔,只是要寫成<br/> 04/23 22:17
scars:是啊 但是就像巢狀結構一樣 不能期待別人也這樣寫啊 04/23 22:20
scars:我上次還特別寫了一個php想把HTML轉成XML..最後放棄 XD 04/23 22:20
Jerrynet:如果那個網頁是用XML或是XHTML就可以轉了XD 04/23 22:23