Предположим, у меня есть 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)
Какова общая стратегия таких преобразований? Я хотел бы сделать много других преобразований, таких как удаление всех тегов и просто оставить текстовое содержимое, добавить теги после некоторых определенных тегов и т. Д.
Нужно ли создавать дерево разбора? Я никогда не делал этого и не знаю, как создать дерево разбора из потока токенов. Или я могу сделать это как-нибудь еще?
Любые предложения приветствуются.
И еще одно - я бы хотел научиться всему этому самому анализу, поэтому я не ищу библиотеку!
Заранее спасибо, Бода Цидо