解析Html生成标签树Word下载.docx

上传人:b****1 文档编号:5202448 上传时间:2023-05-04 格式:DOCX 页数:8 大小:16.57KB
下载 相关 举报
解析Html生成标签树Word下载.docx_第1页
第1页 / 共8页
解析Html生成标签树Word下载.docx_第2页
第2页 / 共8页
解析Html生成标签树Word下载.docx_第3页
第3页 / 共8页
解析Html生成标签树Word下载.docx_第4页
第4页 / 共8页
解析Html生成标签树Word下载.docx_第5页
第5页 / 共8页
解析Html生成标签树Word下载.docx_第6页
第6页 / 共8页
解析Html生成标签树Word下载.docx_第7页
第7页 / 共8页
解析Html生成标签树Word下载.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

解析Html生成标签树Word下载.docx

《解析Html生成标签树Word下载.docx》由会员分享,可在线阅读,更多相关《解析Html生成标签树Word下载.docx(8页珍藏版)》请在冰点文库上搜索。

解析Html生成标签树Word下载.docx

如果在栈中找到与此结束标志名同名的元素(此元素属于栈中第iLevel层),那么表示找到匹配的Tag。

则Tag出栈,将HashTable[iLevel+1]到HashTable[maxLevel]中的所有元素取出作为此Tag的子节点。

放入第HashTable[iLevel]中。

并记录Tag的结束位置。

5.对于xxx之间的字符串xxx,将其作为特殊的HtmlTextTag处理。

出栈,和入栈操作与普通Tag类似。

6.当栈为空的时候表示最后一次出栈的Tag给根节点。

由于是在公司内部开发的东西,所以不可能把源代码拿出来粘贴,所以只能把大概的代码给出。

伪代码如下:

viewplaincopytoclipboardprint?

publicvoidParse(){charch=GetCurrentChar();

//取第一个字符while(!

Eof()){if(ch=='

='

A'

)&

&

(ch0){//将文本作为一个普通Tag入栈Stack.Push(newHtmlTextTag(m_CurrentText));

}tag.BeginPos=iBeginPos;

//记录此Tag的开始位置Stack.Push(tag);

//把Tag入栈}}ch=GetCurrentChar();

if(ch=='

/'

){//可能是结束标签tagName=GetTagName();

//从上到下查看Stack,如果Tag中存在if(FindInStack(tagName)){//在栈中找到名为tagName的元素,则把找到的元素出栈PopTag(tagName);

}}}else{//对于xxx之间的文本xxx,这里将作为TextTag来处理m_CurrentText.Append(GetCurrentChar());

}//继续处理下一个字符ch=MoveNext();

}//解析完成以后,如果栈不空,那么把元素出栈,并把最后一次出栈的元素作为根if(Stack.Count>

0){HtmlTagtag=null;

while(Stack.Count>

0){tag=Stack.Pop();

PopTag(tag);

}//最后一个元素作为根元素if(tag!

=null){m_listRoot.Add(tag);

}}}privatevoidPopTag(HtmlTagtag){intiLevel=Stack.Count;

//找到了元素,把iLevel到m_IMaxLevel中所有的元素按照全部作为tag的子元素for(inti=iLevel+1;

i<

m_iMaxLevel;

i++){for(j=0;

j<

HashTable[i].Count;

j++){tag.Children.Add(HashTable[i][j]);

}}//表示栈已经为空,那么最后一次出栈的tag将作为根if(Stack.Count==0){m_listRoot.Add(tag);

}}privatevoidPopTag(stringtagName){/**元素出栈的时候,首先需要把当前已经存在了的HtmlTextTag入栈*比如:

文本段1文本段2文本段3*在Parse中,当解析出入栈前,需要先把"

文本段1"

入栈*在这里,解析出了结束标志*那么首先需要把"

文本段2"

入栈。

*解析出则需要把"

文本段3'

*这样才能够保证"

和"

文本段3"

成为的子节点,而"

作为的子节点*/if(m_CurrentText.Lenght>

0){//将文本作为一个普通Tag入栈Stack.Push(newHtmlTextTag(m_CurrentText));

}HtmlTagtag=Stack.Pop();

//元素出栈intiLevel=Stack.Count;

//记录栈元素数while(tag.Name!

=tagName){//将tag放入第iLevel层的List中HashTable[iLevel].Add(tag);

tag=Stack.Pop();

iLevel=Stack.Count;

}//元素出栈后续处理PopTag(tag);

}privateHtmlTagGetTag(){if("

如果发现是<

!

--开头的元素"

)//则表示是注释{SkipComment();

}HtmlTagtag=newHtmlTag();

tag.Name=GetTagName();

//这里的Attribute我将其作为HashTable类型,Hash[属性名]=属性值tag.Attribute=GetTagAttribute();

returntag;

}

publicvoidParse()

{

charch=GetCurrentChar();

//取第一个字符

while(!

Eof())

if(ch=='

ch=MoveNext();

//取下一个字符

if((ch>

(ch

iBeginPos=Index;

//记录开始位置

//表示可能是一个标签

HtmlTagtag=GetTag();

//解析此Tag

if(tag!

=null)

//首先判断是否有文本

if(m_CurrentText.Lenght>

0)

//将文本作为一个普通Tag入栈

Stack.Push(newHtmlTextTag(m_CurrentText));

}

tag.BeginPos=iBeginPos;

//记录此Tag的开始位置

Stack.Push(tag);

//把Tag入栈

ch=GetCurrentChar();

//可能是结束标签

tagName=GetTagName();

//从上到下查看Stack,如果Tag中存在

if(FindInStack(tagName))

//在栈中找到名为tagName的元素,则把找到的元素出栈

PopTag(tagName);

else

//对于xxx之间的文本xxx,这里将作为TextTag来处理

m_CurrentText.Append(GetCurrentChar());

//继续处理下一个字符

//解析完成以后,如果栈不空,那么把元素出栈,并把最后一次出栈的元素作为根

if(Stack.Count>

HtmlTagtag=null;

while(Stack.Count>

tag=Stack.Pop();

PopTag(tag);

//最后一个元素作为根元素

m_listRoot.Add(tag);

privatevoidPopTag(HtmlTagtag)

intiLevel=Stack.Count;

//找到了元素,把iLevel到m_IMaxLevel中所有的元素按照全部作为tag的子元素

for(inti=iLevel+1;

i

for(j=0;

j

tag.Children.Add(HashTable[i][j]);

//表示栈已经为空,那么最后一次出栈的tag将作为根

if(Stack.Count==0)

privatevoidPopTag(stringtagName)

/*

*元素出栈的时候,首先需要把当前已经存在了的HtmlTextTag入栈

*比如:

文本段1文本段2文本段3

*在Parse中,当解析出入栈前,需要先把"

入栈

*在这里,解析出了结束标志

*那么首先需要把"

*解析出则需要把"

*这样才能够保证"

作为的子节点

*/

HtmlTagtag=Stack.Pop();

//元素出栈

//记录栈元素数

while(tag.Name!

=tagName)

//将tag放入第iLevel层的List中

HashTable[iLevel].Add(tag);

iLevel=Stack.Count;

//元素出栈后续处理

privateHtmlTagGetTag()

if("

如果发现是

SkipComment();

HtmlTagtag=newHtmlTag();

tag.Name=GetTagName();

//这里的Attribute我将其作为HashTable类型,Hash[属性名]=属性值

tag.Attribute=GetTagAttribute();

returntag;

}解析结束以后,通过访问m_listRoot就可以遍历出所有的节点了。

上面仅仅是给出了大概的方法,不过我相信要将上面的方法转换成可运行代码,各位都是有这个能力的。

解析Html生成标签树

(二)

12:

08|分类:

解析divhtmltd阿道夫|字号大中小订阅前面两篇讲解了解析Html的思想个核心算法,感谢各位提出了意见。

先专门列出一文作为解释:

1、ViewStates提到,“”怎么办?

这个是可以解析出来的,其中解析后节点名为“td”,而“阿道夫骄傲了沙发

如图:

上面的图中,包含了上面提到的例子。

回复ml_dark兄

象这种..你看看你的解析结果....

解析结果如上图。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 节日庆典

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2