Замена тегов в HtmlAgility

#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";
}