演算法简介:
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)
1F:→ etrexetrex:缺点:只会找到一个node 04/23 20:57
2F:推 Jerrynet:如果那个html网页不是巢状结构的话~~~XD 04/23 20:58
3F:→ etrexetrex:只要有一个node 当起点,就能走完所有的node 吧? 04/23 21:00
4F:→ etrexetrex:因为他会同时往下跟往旁边走 不用考虑多个_root问题吧 04/23 21:01
5F:推 Jerrynet:我是说html不一定是巢状结构啊, ex: <b><i>test</b></i> 04/23 21:04
6F:→ etrexetrex:这是什麽鬼 这样的HTML能显示喔= =? 04/23 21:04
7F:→ Jerrynet:还有遇到<!-- -->这种标签就..... 04/23 21:04
8F:→ Jerrynet:可以显示啊,只是这不符合W3C的标准 04/23 21:05
9F:→ etrexetrex:阿 会爆炸吗? 我没试过那个 04/23 21:05
10F:→ Jerrynet:<!-- 这种注解标签我也没试XD 04/23 21:06
11F:→ etrexetrex:晚点来试试 04/23 21:07
12F:推 scars:不符合标准巢状的HTML是有可能出现的 而且遇到<br>的话.. 04/23 22:16
13F:推 Jerrynet:<br>没关系,xml可以用单标签喔,只是要写成<br/> 04/23 22:17
14F:推 scars:是啊 但是就像巢状结构一样 不能期待别人也这样写啊 04/23 22:20
15F:→ scars:我上次还特别写了一个php想把HTML转成XML..最後放弃 XD 04/23 22:20
16F:推 Jerrynet:如果那个网页是用XML或是XHTML就可以转了XD 04/23 22:23