2010-08-22 2 views
2

У меня есть несколько сотен статических файлов HTML, которые необходимо обработать.Обработка HTML-документа с C#

Они содержат ссылки, как этот

<a href="http://www.mysite.com/">Link</a> 

мне нужно добавить? Реф = сам к любому URL, который начинается с http://www.mysite.com и становится

<a href="http://www.mysite.com/?ref=self">Link</a> 

однако, я не знаю, что это будет be http://www.mysite.com или http://www.mysite.com/ также можно связать с подкаталогом.

Каков наиболее эффективный способ сделать это? в C#

+0

Почему голос? – Rana

+0

Я задал себе один и тот же вопрос и поставил перед вами вопрос. – jgauffin

ответ

1

Каков наиболее эффективный способ сделать это? в C#

  1. Посмотрите на строку http://www.mysite.com.
  2. Если этого не происходит, перейдите по ссылке 7.
  3. Ищите следующие ".
  4. Если этого не произошло, ошибки.
  5. Вставить ?ref=self до ".
  6. Перейти к 1.
  7. Возврат.

Это может быть достигнуто с помощью следующей регулярной подстановки выражения:

s#http://www.mysite.com[^"]*#&?ref=self#g 

приятнее (более выразительным) способ будет использовать HTML-парсер и XPath.

+0

Ошибка: атрибут 'href' может быть в одинарных кавычках. – Timwi

+0

@Timwi. Это не ошибка. В ОП четко указывалось, что ожидаемый вход (который не включал '' '), и что эффективность была фактором (так говорят ...). – strager

+0

Я не вижу, где он это сказал. ОП четко заявила, что ожидаемый ввод - ** HTML **. Он также не заявил, что это специальное подмножество HTML, и он не утверждал, что его примеры являются исчерпывающими. Если бы я не прокомментировал, возможно, он не понял, что любой из его HTML-файлов может содержать атрибуты href с одинарными кавычками и что ваш алгоритм молча пропустит их. – Timwi

1

Анализ HTML может быть сложным, поскольку HTML часто содержит плохо сформированные теги и атрибуты. Я предлагаю изучить существующую библиотеку разбора HTML, чтобы сделать ваш тяжелый подъем, или, используя XSLT, преобразовать действительный (x) HTML в желаемый результат.

У этого вопроса What is the best way to parse html in C#? есть некоторые хорошие ссылки на библиотеки разбора HTML для C#.

+0

Библиотека синтаксического анализа html похожа на захват пушки охотой на уток в этом случае. – jgauffin

+0

@jgauffin, я не вижу, как. Это определенно подходящее решение. – strager

+0

Потому что URI довольно легко найти и заменить в этом случае. – jgauffin

0

Вы можете использовать Page.Request.UrlReferrer, чтобы определить, откуда пришел запрос.

Смежные вопросы