как заменить тег тегом с помощью HtmlAgilityPack?
довольно странно! Когда я загружаю и заменяю С пустой строкой, используя
var document = new HtmlDocument();
document.LoadHtml(data);
document.DocumentNode.OuterHtml.Replace("<tbody>", "");
это прекрасно работает & <tbody>
будут удалены.
таким же образом, когда я пытаюсь заменить <br>
С <br/>
используя
document.DocumentNode.OuterHtml.Replace("<br>", "<br/>");
это не работает : (
тоже пробовал,
var brTags = document.DocumentNode.SelectNodes("//br");
if (brTags != null)
{
foreach (HtmlNode brTag in brTags)
{
brTag.OuterHtml = "<br/>";
// brTag.Name= "br/"; - > Also this one :(
}
}
функция замены HTMLAgilityPack () не работает для самозакрывающихся тегов?
4 ответов
вам не нужно заменять <br>
by <br/>
вручную, Если вам нужно закрыть узел, просто проинструктируйте библиотеку сделать это, например это:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("<br/>");
doc.Save(Console.Out);
выведет это:
<br>
и
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("<br/>");
doc.OptionWriteEmptyNodes = true;
doc.Save(Console.Out);
выведет это:
<br />
StringWriter writer = new StringWriter();
var xmlWriter = XmlWriter.Create(writer, new XmlWriterSettings() { OmitXmlDeclaration = true });
document.OptionOutputAsXml = true;
document.Save(xmlWriter);
var newHtml = writer.ToString();
на самом деле ваш первый запрос также не должен работать, если вы не назначаете результат замены обратно в документ. Строки неизменяемы в C#. Когда вы делаете Replace
создается и возвращается новая строка. Исходная строка остается неизменной.
и OuterHtml
доступно только для чтения. Вы не можете назначить его.
чтобы удалить узлы, вы должны выбрать их, удалить каждый и сохранить результат в исходную строку.
var document = new HtmlDocument();
document.LoadHtml(data);
foreach (var tbody in document.DocumentNode.SelectNodes("//tbody"))
tbody.Remove();
data = document.DocumentNode.OuterHtml;
обновление:
foreach (var br in document.DocumentNode.SelectNodes("//br"))
br.RemoveAllChildren();
HtmlNode.ElementsFlags["br"] = HtmlElementFlag.Closed | HtmlElementFlag.Empty;
document.OptionWriteEmptyNodes = true;
data = document.DocumentNode.OuterHtml;