#html-agility-pack
#html-пакет гибкости
Вопрос:
Я пытаюсь заменить все мои h1
теги на h2
tags и использую HtmlAgility pack.
Я сделал это:
var headers = doc.DocumentNode.SelectNodes("//h1");
if (headers != null)
{
foreach (HtmlNode item in headers)
{
//item.Replace??
}
}
и я застрял там. Я пробовал это:
var headers = doc.DocumentNode.SelectNodes("//h1");
if (headers != null)
{
foreach (HtmlNode item in headers)
{
HtmlNode newNode = new HtmlNode(HtmlNodeType.Element, doc, item.StreamPosition);
newNode.InnerHtml = item.InnerHtml;
// newNode suppose to set to h2
item.ParentNode.ReplaceChild(newNode, item);
}
}
проблема в том, что я понятия не имею, как создать новый h2, получить все атрибуты и т.д.
я уверен, что есть простой способ сделать это, есть идеи?
Ответ №1:
var headers = doc.DocumentNode.SelectNodes("//h1");
if (headers != null)
{
foreach (HtmlNode item in headers)
{
item.Name = "h2"
}
}
Комментарии:
1. продолжаю свое приключение, исследуя HtmlAgilityPack .. есть ли способ принудительно заключить все атрибуты в двойные кавычки? я нашел ‘OptionOutputOptimizeAttributeValues’, но это просто удаляет все кавычки..
2. Я не знаю. Попробуйте задать вопрос на официальном форуме HtmlAgilityPack. htmlagilitypack.codeplex.com/discussions
3. Я также пытаюсь изменить заголовки, и использую именно этот код. Я могу изменить имя на «h2», но «outerHTML» по-прежнему является h1?
Ответ №2:
Аналогичный подход, заменяющий теги с использованием потомков вместо SelectNodes:
IEnumerable<HtmlNode> tagDescendants = doc.DocumentNode.Descendants("h1");
foreach (HtmlNode htmlNode in tagDescendants)
{
htmlNode.Name = "h2";
}