Я предлагаю использовать Tidy.NET для очистки беспорядочного ввода
Tidy.NET имеет хороший API для получения списка проблем (MessageCollection
) в вашем «XML», и вы можете использовать его для исправления текстового потока в памяти. Простейшей вещью было бы исправление одной ошибки за раз, считая, что при многих ошибках она не будет работать слишком хорошо. В противном случае вы можете исправить ошибки в обратном порядке документов, чтобы смещения сообщений оставались действительными при выполнении исправлений
Вот пример для преобразования ввода HTML в XHTML:
Tidy tidy = new Tidy ();
/* Set the options you want */
tidy.Options.DocType = DocType.Strict;
tidy.Options.DropFontTags = true;
tidy.Options.LogicalEmphasis = true;
tidy.Options.Xhtml = true;
tidy.Options.XmlOut = true;
tidy.Options.MakeClean = true;
tidy.Options.TidyMark = false;
/* Declare the parameters that is needed */
TidyMessageCollection tmc = new TidyMessageCollection();
MemoryStream input = new MemoryStream();
MemoryStream output = new MemoryStream();
byte[] byteArray = Encoding.UTF8.GetBytes("Put your HTML here...");
input.Write(byteArray, 0 , byteArray.Length);
input.Position = 0;
tidy.Parse(input, output, tmc);
string result = Encoding.UTF8.GetString(output.ToArray());