#html-agility-pack
Вопрос:
Я получаю данные внутри тега <‘li> вот так:
var doc = new HtmlDocument();
doc.LoadHtml(html);
var list = new List<string>(doc.DocumentNode.SelectNodes("//li")
.Select(li => li.InnerText));
но если у ли внутри есть еще один такой тег <em>
, он был проигнорирован.
Как я могу сохранить все внутри <li>
, не используя innerHTML?
Спасибо
Ответ №1:
То, что вы хотите, это OuterHtml
.
Цитата из MDN:
Атрибут outerHTML интерфейса DOM элемента получает сериализованный фрагмент HTML, описывающий элемент, включая его потомков. Он также может быть настроен для замены элемента узлами, проанализированными из данной строки.
Чтобы получить только HTML-представление содержимого элемента или заменить содержимое элемента, вместо этого используйте свойство innerHTML.
var doc = new HtmlDocument();
doc.LoadHtml(@"
<ul>
<li>
<em>item 1</em>
</li>
<li>
<span>item</span> <em>2</em> <br/>
</li>
</ul>
");
var ul = doc.DocumentNode.Element("ul");
var lis = ul.Elements("li");
foreach(var li in lis)
{
Console.WriteLine("----------------- inner html -------------------");
Console.WriteLine(li.InnerText); //prints "Item N" (content only)
Console.WriteLine("----------------- outer html -------------------");
Console.WriteLine(li.OuterHtml); //prints <li> all descending tags </li>
}