c# 桌面程序中,如何格式化 html? 例如实现缩进、换行等,增加可读性

oldhunter 2018-08-23 04:42:24
c# 桌面程序中,如何格式化 html? 例如实现缩进、换行等,增加可读性

已参考了以下文章,没有效果,或效果不佳:
https://www.cnblogs.com/TianFang/archive/2012/11/22/2782624.html

文章中给出的2个方法已测试:

1、第一个方法出现异常:内存溢出
2、第二个方法,作者用的正则式匹配,感觉稳定性不好,有没有通过 HtmlAgilityPack 实现缩进或格式化的方法?



...全文
355 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldhunter 2018-08-24
  • 打赏
  • 举报
回复
引用 10 楼 xuzuning 的回复:
不明白为什么一定要用现成的呢?
人家能写出来,自己为何就写不出来?就那么不自信?


好,自己写! 谢谢啦
xuzuning 2018-08-24
  • 打赏
  • 举报
回复
不明白为什么一定要用现成的呢?
人家能写出来,自己为何就写不出来?就那么不自信?
吉普赛的歌 2018-08-24
  • 打赏
  • 举报
回复
VS 有整理代码的功能, 如果能找到实现这个功能的 dll , 那就简单了
oldhunter 2018-08-24
  • 打赏
  • 举报
回复
我想找找成熟的方法的原因在于,从 DOM 再转换输出 html 字符串时,不能简单换行或缩进,因为需要提高可读性,例如:<a> <i> <b> <em> 等标记,有时需要换行,有时不需要换行。如果全部以换行来处理的话,会让源文件查看器的纵向滚动条变得很长。

这两天找到一个类库:https://github.com/markbeaton/TidyManaged,是对 c 类库的一个封闭,不知道有没有更好的类库,最好是纯托管的类库。
oldhunter 2018-08-24
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
WriteTO 方法不行吗?


doc.DocumentNode.WriteTo方法,跟 doc.DocumentNode.InnerHtml 一样的,不会进行格式化处理的。
  • 打赏
  • 举报
回复
比如说一个属性的字符串中有 "<span>"这种东西,或者属性重新排列、去掉多余的分隔符,关键字的大小写适配,等等等等格式化需求,没有语法分析树概念,仅凭会匹配几个单词儿的概念,是不可能以专业的态度写出格式化程序的。
  • 打赏
  • 举报
回复
一个最基本的概念,所谓正则之类的,不是有层次的东西。有层次的东西最低级的也是语法分析。所以要缩进、换行、格式化代码打印输出,自然是基于语法分析器的。
  • 打赏
  • 举报
回复
HtmlAgilityPack 是语法分析工具。

任何格式化打印输出,都是基于语法分析,有了语法分析树你就能正确遍历任何深度层次,并重新格式化每一行代码。基于语法分析树再重新打印整个代码是易如反掌的,稍微动点心思就能明白。除非你连递归、数据结构等等基本课程都没有学过。
  • 打赏
  • 举报
回复
考虑下格式问题
xuzuning 2018-08-23
  • 打赏
  • 举报
回复
WriteTO 方法不行吗?
oldhunter 2018-08-23
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
比如说一个属性的字符串中有 "<span>"这种东西,或者属性重新排列、去掉多余的分隔符,关键字的大小写适配,等等等等格式化需求,没有语法分析树概念,仅凭会匹配几个单词儿的概念,是不可能以专业的态度写出格式化程序的。


谢谢,自己遍历写缩进也是可以,因为已经在用 HtmlAgilityPack 的DOM树。只是想看有没有更成熟的解决办法。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧