如何解析带有加粗、斜体、下划线等 HTML 标签的子字符串的字符串?

3

我为C#的2D图形框架创建了一种文本渲染工具。

现在我正在尝试解析带有特定HTML标签的文本,例如:

"Hello <b>world</b>!" 

但是解析代码变得越来越丑陋,我想,一定有一些库可以做到这一点。最终输出应该是一个数据结构的数组,例如:

string text;
bool IsBold;
bool IsItalic;
bool IsUnderlined;
...

或者

string text;
FontStyle FontStyle;

有人知道这样的解析器吗?

非常感谢!


1
你的代码应该如何响应类似于"<b>hel</b>lo"这样的输入? - Konrad Rudolph
然后只有“hel”是粗体。它将输出一个包含2个数据结构的数组,“hel”具有IsBold = true,而“lo”具有IsBold = false。 - thalm
那么,对于以下输入怎么办?"<b><i>hi</i> there</b>, you"。显然,一旦允许嵌套标记,数组就不足以满足要求。 - Konrad Rudolph
这正是我的问题。在这种情况下,它应该输出数组中的以下条目:"hi",IsBold = true,IsItalic = true,然后是"there",IsBold = true,IsItalic = false,最后是", you",IsBold = false,IsItalic = false。这有意义吗? - thalm
3个回答

3

HTML Agility Pack是一款优秀的HTML解析器(也可以解析片段)。

您可以使用XPath语法对其进行查询(类似于XmlDocument)-不确定它是否完全符合您的要求。


这让我想到了System.Xml.XPath命名空间。现在我可以使用"/parenttag/b"选择一些在<b>标签中的文本,但是当有像<b><i>文本</i>更多文本</b>这样嵌套的标签时,我该如何获取我的单独文本片段呢? - thalm
@thalm - 这将涉及在您的XPath中选择::text()节点。 - Oded
不太确定这会如何解决嵌套标签的问题..? - thalm

0

0

Tidy.net 是一个非常棒的工具,它是从原始的 Tidy 项目移植而来,该项目用于 HTML Tidy Firefox 插件中。将您的代码通过 Tidy 运行,它将返回干净、符合规范的 HTML。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接