ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:16.57KB ,
资源ID:5202448      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-5202448.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(解析Html生成标签树Word下载.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

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

1、如果在栈中找到与此结束标志名同名的元素(此元素属 于栈中第iLevel层),那么表示找到匹配的Tag。则Tag出栈,将HashTableiLevel+1到 HashTablemaxLevel中的所有元素取出作为此Tag的子节点。放入第HashTable iLevel中。并记录Tag的结束位置。5. 对于xxx之间的字符串xxx,将其作为特殊的HtmlTextTag处理。出栈,和入栈操作与普通Tag类似。6. 当栈为空的时候表示最后一次出栈的Tag给根节点。 由于是在公司内部开发的东西,所以不可能把源代码拿出来粘贴,所以只能把大概的代码给出。伪代码如下:view plaincopy to cli

2、pboardprint?public void Parse() char ch = GetCurrentChar(); /取第一个字符 while (!Eof() if (ch = = A) & (ch 0) /将文本作为一个普通Tag入栈 Stack.Push(new HtmlTextTag(m_CurrentText); tag.BeginPos = iBeginPos; /记录此Tag的开始位置 Stack.Push(tag); /把Tag入栈 ch = GetCurrentChar(); if (ch = /) /可能是结束标签 tagName = GetTagName(); /从上到

3、下查看Stack,如果Tag中存在 if (FindInStack(tagName) /在栈中找到名为tagName的元素,则把找到的元素出栈 PopTag(tagName); else /对于xxx之间的文本xxx,这里将作为TextTag来处理 m_CurrentText.Append(GetCurrentChar(); /继续处理下一个字符 ch = MoveNext(); /解析完成以后,如果栈不空,那么把元素出栈,并把最后一次出栈的元素作为根 if (Stack.Count 0) HtmlTag tag = null; while (Stack.Count 0) tag = Stac

4、k.Pop(); PopTag(tag); /最后一个元素作为根元素 if (tag != null) m_listRoot.Add(tag); private void PopTag(HtmlTag tag) int iLevel = Stack.Count; /找到了元素,把iLevel到m_IMaxLevel中所有的元素按照全部作为tag的子元素 for (int i = iLevel + 1; i m_iMaxLevel; i+) for (j = 0; j 0) /将文本作为一个普通Tag入栈 Stack.Push(new HtmlTextTag(m_CurrentText); Ht

5、mlTag tag = Stack.Pop(); /元素出栈 int iLevel = Stack.Count; /记录栈元素数 while (tag.Name != tagName) /将tag放入第iLevel层的List中 HashTableiLevel.Add(tag); tag = Stack.Pop(); iLevel = Stack.Count; /元素出栈后续处理 PopTag(tag); private HtmlTag GetTag() if (如果发现是 (ch iBeginPos = Index; /记录开始位置/表示可能是一个标签HtmlTag tag = GetTag

6、(); /解析此Tag if (tag != null)/首先判断是否有文本 if (m_CurrentText.Lenght 0)/将文本作为一个普通Tag入栈 Stack.Push(new HtmlTextTag(m_CurrentText);tag.BeginPos = iBeginPos; /记录此Tag的开始位置 Stack.Push(tag); /把Tag入栈 ch = GetCurrentChar();)/可能是结束标签 tagName = GetTagName();/从上到下查看Stack,如果Tag中存在 if (FindInStack(tagName)/在栈中找到名为tag

7、Name的元素,则把找到的元素出栈 PopTag(tagName);else/对于xxx之间的文本xxx,这里将作为TextTag来处理 m_CurrentText.Append(GetCurrentChar();/继续处理下一个字符 /解析完成以后,如果栈不空,那么把元素出栈,并把最后一次出栈的元素作为根 if (Stack.Count HtmlTag tag = null;while (Stack.Count tag = Stack.Pop();PopTag(tag);/最后一个元素作为根元素 m_listRoot.Add(tag);private void PopTag(HtmlTag

8、tag)int iLevel = Stack.Count;/找到了元素,把iLevel到m_IMaxLevel中所有的元素按照全部作为tag的子元素 for (int i = iLevel + 1; i for (j = 0; j tag.Children.Add(HashTableij);/表示栈已经为空,那么最后一次出栈的tag将作为根 if (Stack.Count = 0)private void PopTag(string tagName)/* 元素出栈的时候,首先需要把当前已经存在了的HtmlTextTag入栈* 比如:文本段1文本段2文本段3* 在Parse中,当解析出入栈前,需

9、要先把入栈* 在这里,解析出了结束标志* 那么首先需要把* 解析出则需要把* 这样才能够保证作为的子节点*/HtmlTag tag = Stack.Pop(); /元素出栈 /记录栈元素数 while (tag.Name != tagName)/将tag放入第iLevel层的List中 HashTableiLevel.Add(tag);iLevel = Stack.Count;/元素出栈后续处理 private HtmlTag GetTag()if (如果发现是 SkipComment();HtmlTag tag = new HtmlTag();tag.Name = GetTagName();

10、/这里的Attribute我将其作为HashTable类型,Hash属性名=属性值 tag.Attribute = GetTagAttribute();return tag; 解析结束以后,通过访问m_listRoot就可以遍历出所有的节点了。上面仅仅是给出了大概的方法,不过我相信要将上面的方法转换成可运行代码,各位都是有这个能力的。解析Html生成标签树(二) 12:08| 分类:解析 div html td 阿道夫 |字号大中小 订阅 前面两篇讲解了解析Html的思想个核心算法,感谢各位提出了意见。先专门列出一文作为解释:1、ViewStates提到,“”怎么办?这个是可以解析出来的,其中解析后节点名为“td”,而“ 阿道夫骄傲了沙发如图:上面的图中,包含了上面提到的例子。回复ml_dark 兄象这种. 你看看你的解析结果.解析结果如上图。

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

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