Я знаю, что опаздываю на вечеринку, но лучше поздно, чем никогда (также я надеюсь, что этот ответ принесет пользу кому-то еще).
Оба комментария к вопросу правильные. С одной стороны, у нас есть спецификация W3C и источник документа, который говорит нам, что в (официальной) сериализации не будет места, с другой стороны, у нас есть довольно распространенный случай «интегрировать» некоторые пробелы, когда это применимо. (или, может быть, даже новые строки, например, если виден элемент <br>
).
При написании библиотека не знает вашего конкретного варианта использования (т. е. когда вы хотите вставить пробелы). Однако это может помочь вам более легко перейти в желаемое состояние.
Сериализация из DOM в строку выполняется через экземпляр класса, который реализует IMarkupFormatter
. Метод ToHtml()
любого узла DOM принимает такой объект для возврата строки. делать
var myFormatter = new MyMarkupFormatter();
var text = document.Body.ToHtml(myFormatter);
Теперь вопрос сводится к реализации MyMarkupFormatter, которая у нас работает. Однако этот модуль форматирования по существу выдает только текстовые узлы, а некоторые теги обрабатываются по-разному (например, возвращая некоторый текст, например пробелы).
public class MyMarkupFormatter : IMarkupFormatter
{
String IMarkupFormatter.Comment(IComment comment)
{
return String.Empty;
}
String IMarkupFormatter.Doctype(IDocumentType doctype)
{
return String.Empty;
}
String IMarkupFormatter.Processing(IProcessingInstruction processing)
{
return String.Empty;
}
String IMarkupFormatter.Text(ICharacterData text)
{
return text.Data;
}
String IMarkupFormatter.OpenTag(IElement element, Boolean selfClosing)
{
switch (element.LocalName)
{
case "p":
return "\n\n";
case "br":
return "\n";
case "span":
return " ";
}
return String.Empty;
}
String IMarkupFormatter.CloseTag(IElement element, Boolean selfClosing)
{
return String.Empty;
}
String IMarkupFormatter.Attribute(IAttr attr)
{
return String.Empty;
}
}
Если вам не нужно удаление всей нетекстовой информации, AngleSharp также предлагает PrettyMarkupFormatter
из коробки - возможно, это уже довольно близко к тому, что вы хотели («более красивый» форматировщик разметки).
Надеюсь это поможет!
person
Florian Rappl
schedule
12.12.2017