解析html成標籤樹結構以後,我們不但可以很容易取得想要的元素,同時也很容易將html轉換成對應的xml檔案。但是由於**是在公司寫的,所以沒有貼上出來的可能性,所以我只能給出大概的**流程,具體細節描述,相信各位都很容易寫出來,並且寫的比我好,關鍵的是演算法實現思想。演算法的關鍵如下:
1.html中每個tag都是都將作為樹中的乙個節點存在的,每個tag都屬於樹中的某一層。
2.輔助資料結構:棧(stack)、list、hashtable。其中hashtable[i](i屬於int型別)是乙個list,用於臨時儲存第i層子tag。
3.順序掃瞄html文字,當遇到」4.遇到這樣的標誌,表示可能是某個tag的結束。解析出此結束標誌的tag名。如果在棧中找到與此結束標誌名同名的元素(此元素屬於棧中第ilevel層),那麼表示找到匹配的tag。則tag出棧,將hashtable[ilevel+1]到hashtable[maxlevel]中的所有元素取出作為此tag的子節點。放入第hashtable [ilevel]中。並記錄tag的結束位置。
5.對於***之間的字串***,將其作為特殊的htmltexttag處理。出棧,和入棧操作與普通tag類似。
6.當棧為空的時候表示最後一次出棧的tag給根節點。
由於是在公司內部開發的東西,所以不可能把源**拿出來貼上,所以只能把大概的**給出。
偽**如下:
public void parse()
tag.beginpos = ibeginpos; //記錄此tag的開始位置
stack.push(tag); //把tag入棧 }}
ch = getcurrentchar();
if (ch == '/')}}
else
//繼續處理下乙個字元
ch = movenext();
}//解析完成以後,如果棧不空,那麼把元素出棧,並把最後一次出棧的元素作為根
if (stack.count > 0)
//最後乙個元素作為根元素
if (tag != null)
}}private void poptag(htmltag tag)
}//表示棧已經為空,那麼最後一次出棧的tag將作為根
if (stack.count == 0)
}private void poptag(string tagname)
htmltag tag = stack.pop(); //元素出棧
int ilevel = stack.count; //記錄棧元素數
while (tag.name != tagname)
//元素出棧後續處理
poptag(tag);
}private htmltag gettag()
htmltag tag = new htmltag();
tag.name = gettagname();
//這裡的attribute我將其作為hashtable型別,hash[屬性名]=屬性值
tag.attribute = gettagattribute();
return tag;
}
解析結束以後,通過訪問m_listroot就可以遍歷出所有的節點了。上面僅僅是給出了大概的方法,不過我相信要將上面的方法轉換成可執行**,各位都是有這個能力的。。。 解析Html生成標籤樹(一)
解析html成標籤樹結構以後,我們不但可以很容易取得想要的元素,同時也很容易將html轉換成對應的xml檔案。但是由於 是在公司寫的,所以沒有貼上出來的可能性,所以我只能給出大概的 流程,具體細節描述,相信各位都很容易寫出來,並且寫的比我好,關鍵的是演算法實現思想。演算法的關鍵如下 1.html中每...
JAVA解析html標籤
最近同事碰到乙個問題,要取出資料庫中靜態頁面標籤中的內容,問我應該怎麼做,我隨口答道,用正規表示式唄,很好正規表示式,其實我也不會用。很久以前我就碰到過類似的問題,當時是我同學問我的,讓我思考一下如何解析html標籤。我當時隨口答道用split唄,結果一頓冷嘲熱諷。在我的逼問下,他告訴我用正則比較好...
HTML標籤簡寫 連寫 快速生成html頁面!
建立多個相同標籤 例 建立無序列表ul裡面4個li標籤 control d是快速複製上一行,也可以實現上面的 給標籤新增屬性 值用 例 div input type email input type password input type submit value 提交 tab 給標籤新增內容用 例...