HtmlAgilityPack to replacechild, warum funktioniert es nicht?

c# html-agility-pack

Frage

Ich implementiere eine Funktion, um die Seite " http://cnblogs.com " anzufordern.
Wenn ich HtmlAgilityPack verwende, um mehr HtmlNode zu ersetzen, aber einige Dinge durcheinander gebracht haben ----- Es kann nicht ersetzen.

Der Code ist:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using HtmlAgilityPack;//I Use NuGet to include HtmlAgilityPack(Vs2012)

namespace CatchWebSample
{
    class Program
    {
        public static void Main(string[] args)
        {
            HtmlDocument document = new HtmlDocument();
            WebClient wc = new WebClient();
            wc.Encoding = Encoding.GetEncoding("utf-8");
            string content = wc.DownloadString("http://cnblogs.com");
            document.LoadHtml(content);
            string oldContent = document.DocumentNode.OuterHtml;

            //here, I want to replace all xpath= //div[@class='post_item_foot'] htmlnodes
            HtmlNodeCollection targetNodeCollection = document.DocumentNode.SelectNodes(@"//div[@class='post_item_foot']");

            HtmlNode newHtmlNode;
            if (targetNodeCollection != null && targetNodeCollection.Count > 0)
            {
                for (int i = 0; i < targetNodeCollection.Count; i++)
                {
                    var targetNode = targetNodeCollection[i];
                    newHtmlNode = document.CreateElement("span");
                    newHtmlNode.InnerHtml = HtmlDocument.HtmlEncode("###### REPLACED CONTENT #########");

                    targetNode.ParentNode.ReplaceChild(newHtmlNode, targetNode);
                }

                content = document.DocumentNode.OuterHtml;

                //but the result is same of the original data,why it can not replace ?
                bool flag = string.Compare(oldContent, content) == 0;
            }

        }
    }
}

Ich bin so verwirrt und warum?

Beliebte Antwort

replaceChild (), insertAfter () plötzlich hörten beide auf, auch für mich zu arbeiten.

Meine beste Alternative war es, innerhtml durch "new html string" zu ersetzen

targetnode.innerhtml = newNodeAsString;

bearbeiten:

Beim HtmlAgilityPack ist ein Fehler beim Einfügen von Werten / Knoten aufgetreten . aufgrund einiger Zwischenspeicherung, damit es schneller funktioniert.

Deshalb habe ich es aufgegeben. und benutzte AngleSharp .

bearbeiten:

Mitte 2017 wird HAP hier entwickelt. Ich werde nicht zurück gehen. Sie können auch kein Problem bei HAP erstellen.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum