Tidy.NET - как просматривать сообщения об ошибках? - PullRequest
1 голос
/ 06 февраля 2012

Мой код использует Tidy.NET для «очистки» документов HTML.В некоторых случаях возвращаемый HTML-код пуст, и я не знаю, почему.

Переменная messages содержит коллекцию сообщений, а ее свойство Count имеет значение 2 после обработки HTML-кода.Несмотря на это, я не знаю, как на самом деле просмотреть сообщения об ошибках.

Это код:

        var tidy = new Tidy();

        var input = new MemoryStream();
        var output = new MemoryStream();

        byte[] byteArray = Encoding.UTF8.GetBytes(html);
        input.Write(byteArray, 0, byteArray.Length);
        input.Position = 0;

        var messages = new TidyMessageCollection();

        tidy.Parse(input, output, messages);

        html = Encoding.UTF8.GetString(output.ToArray());

Что мне нужно сделать, чтобы узнать, что происходит?

Ответы [ 3 ]

2 голосов
/ 07 февраля 2012

Я нашел способ.Вы должны перебрать коллекцию сообщений.Информационные сообщения и предупреждения также добавляются в список, поэтому вы должны проверить, что свойство Level получает только ошибки (или предупреждения, что хотите).

foreach (TidyMessage message in messages) 
{
    if (message.Level == MessageLevel.Error) 
    {
        // error handling here
    }
}
0 голосов
/ 13 февраля 2014

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

var tidyErrors = (from TidyMessage msg in tmc where msg.Level == MessageLevel.Error select msg.Message).ToList();

Надеюсь, это поможет кому-то еще.

Simon

0 голосов
/ 04 мая 2012

У меня была такая же проблема сегодня, и она была решена путем изменения исходного кода TidyNet.

В классе TidyMessageCollection я создал открытое свойство с именем MessageLists, которое защищает InnerLists с ошибками разбора:

В Tidy.TidyMessageCollection

public ArrayList MessageList
{
    get { return InnerList; }
}

Теперь вы можете прочитать все сообщения об ошибках после вызова Parse вне проекта Tidy, например:

Tidy tidy = new Tidy();    
TidyMessageCollection tmc = new TidyMessageCollection();
MemoryStream input = new MemoryStream();
MemoryStream output = new MemoryStream();

tidy.Parse(input, output, tmc);

//Same code than you
foreach(TidyMessage message in tmc.MessageList)
if (message.Level == MessageLevel.Error) 
{
    // error handling here
}
...