假设我有一个已标记化的 HTML 文档,如何将其转换为新文档或应用其他一些转换?
例如,假设我有这个 HTML:
<html>
<body>
<p><a href="/foo">text</a></p>
<p>Hello <span class="green">world</span></p>
</body>
</html>
我目前写的是一个输出标记流的标记器。对于本文档,它们将是(用伪代码编写):
TAG_OPEN[html] TAG_OPEN[body] TAG_OPEN[p] TAG_OPEN[a] TAG_ATTRIBUTE[href]
TAG_ATTRIBUTE_VALUE[/foo] TEXT[text] TAG_CLOSE[a] TAG_CLOSE[p]
TAG_OPEN[p] TEXT[Hello] TAG_OPEN[span] TAG_ATTRIBUTE[class]
TAG_ATTRIBUTE_VALUE[green] TEXT[world] TAG_CLOSE[span] TAG_CLOSE[p]
TAG_CLOSE[body] TAG_CLOSE[html]
但现在我不知道如何使用这个流来创建一些转换。
例如,我想改写TAG_ATTRIBUTE_VALUE[/foo]
成TAG_OPEN[a] TAG_ATTRIBUTE[href]
别的东西。
我想做的另一个转换是让它在括号TAG_ATTRIBUTE[href]
后输出属性TAG_OPEN[a]
,例如,
<a href="/foo">text</a>
被重写为
<a href="/foo">text</a>(/foo)
进行此类转换的一般策略是什么?我想做很多其他的转换,比如剥离所有标签并只留下 TEXT 内容,在某些特定标签之后添加标签等。
我需要创建解析树吗?我从来没有做过,也不知道如何从令牌流中创建解析树。或者我可以以其他方式做到这一点吗?
欢迎任何建议。
还有一件事 - 我想自己学习所有这些解析,所以我不是在寻找图书馆!
预先感谢, Boda Cydo