Как вы используете htmlencode с помощью html agility pack? - PullRequest
0 голосов
/ 23 сентября 2008

Кто-нибудь делал это? По сути, я хочу использовать html, сохраняя основные теги, такие как h1, h2, em и т. Д .; очистить все не http адреса в img и тегах; и HTMLEncode каждый второй тег.

Я застрял в части кодирования HTML. Я знаю, чтобы удалить узел, вы делаете "node.ParentNode.RemoveChild (node);" где узел - это объект класса HtmlNode. Вместо того, чтобы удалить узел, я хочу HTMLEncode его.

Ответы [ 2 ]

1 голос
/ 24 сентября 2008

Вам необходимо удалить узел, представляющий элемент, который вам не нужен. Затем закодированный HTML необходимо будет повторно добавить в качестве текстового узла.

Если вы не хотите обрабатывать дочерние элементы элементов, которые вы хотите выбросить, вы можете просто использовать OuterHtml ... что-то вроде этого может работать:

node.AppendChild(new HtmlTextNode { Text = HttpUtility.HtmlEncode(nodeToDelete.OuterHtml) });
0 голосов
/ 10 декабря 2008

Ответ выше в значительной степени покрывает это. Однако есть кое-что добавить.

Вы не хотите изменять определенный узел, но все они, поэтому приведенный выше код, вероятно, будет методом, заключенным в оператор if (чтобы убедиться, что это тег, который вы хотите использовать для HtmlEncode). Более того, поскольку Agility Pack не раскрывает узлы по порядковому номеру, вы не можете выполнить итерацию всего документа. Рекурсия - самый простой способ сделать это. Вы, наверное, уже знаете это ...

Я решил похожую проблему, и у меня есть некоторый шелл-код (C #), который вы можете использовать: http://dev.forrestcroce.com/normalizer-of-web-pages-qualifier-of-urls/2008-12-09/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...