2013-06-18 3 views
2

Я читаю веб-сайты на C# и получаю содержимое как строку .... Есть некоторые сайты, которые не имеют хорошо сформированной структуры html.HtmlAgilityPack Проблема при чтении html

Я использую HtmlAgilityPack, которые дают мне вопрос в этом случае.

Можете ли вы предложить мне, что использовать, чтобы он мог читать целую строку, и я могу получить полезную информацию?

Вот мой код

htmlDoc.LoadHtml(s); 
    if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0) 

Почему это, если условие истинно для моего случая

+0

Я считаю, что 'коллекция ParseErrors' может ответить на ваш вопрос –

+0

Я думаю, ваш HTML является недействительным. Можете ли вы указать значение s? – speti43

+0

@ speti43 да я знаю, что мой html недействителен, вот что я упомянул в своем вопросе .... я не могу исправить html, поскольку он приходит непосредственно с веб-страниц .. что делать сейчас? –

ответ

3

Что ошибка вы получаете? Это бросает исключение или вы просто хотите увидеть ошибку? Трудно сказать, каков ваш реальный вопрос.

Вы можете увидеть ошибки разметки в HTML, используя свойство HtmlDoc.ParseErrors и повторить их. Это даст вам номер строки, код и тип ошибки.

Вы можете посмотреть более подробную информацию об этой недвижимости здесь https://stackoverflow.com/a/5367455/235644

Редактировать

Ok, так что вы обновили свой вопрос, так как мой ответ. Вы можете увидеть, что конкретная ошибка, возвращающая true в вашей инструкции IF, путем циклического перехода через .ParseErrors, описана выше.

Второй Редактировать

Вы можете цикл, хотя ошибки, как так:

foreach (var error in htmlDoc.ParseErrors) 
{ 
     Debug.WriteLine(error.Line); 
     Debug.WriteLine(error.Reason); 
} 
+0

ParseErrors.count дает мне 59, поэтому он приходит в состояние IF. Когда я использую «htmlDoc.ParseErrors.ToString();» он дает мне эту ошибку ... "System.Collections.Generic.List'1 [HtmlAgilityPack.HtmlParseError]" –

+0

Вы не можете просто вызвать '.ToString()' в списке <>. Вам необходимо пройти через каждую ошибку. – DaveHogan

+0

@Methew - я обновил свой ответ на демонстрацию, как в цикле, хотя «ParseErrors» – DaveHogan

0

Вы должны исправить ошибку в вашем HTML, и после того, как это действительно вы можете пойти дальше. Вот та же самая проблема: Invalid HTML in AgilityPack

+0

Я проверяю «htmlDoc.ParseErrors» это говорит мне _code = «EndTagNotRequired» и _reason End Tag не требуется ... –

+0

@speti - Я понял, что это не его HTML, поскольку он утверждает, что он «читает сайты». Я предполагаю, что это какой-то паук. – DaveHogan

+0

@DaveHogan: на 100% прав ... у меня есть паук, так что теперь делать? –

0

Если ваш HTML является внешним, и вы не можете это исправить, вы можете сначала запустить его через очищающий препроцессор, а затем разобрать его с HtmlAgilityPack.

Это попытается исправить как можно больше проблем, прежде чем HtmlAgilityPack получит его. Наиболее популярным инструментом очистки HTML является Tidy. Смотрите версию .NET здесь:

http://sourceforge.net/projects/tidynet/

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