Ersetzen eines Knotens mithilfe von HtmlAgilityPack Strange Strange Error

c# html html-agility-pack parsing

Frage

Ich habe eine Webseite, auf der eine Tabelle angezeigt wird, die der Benutzer bearbeiten kann. Nachdem die Änderungen vorgenommen wurden, möchte ich die Tabelle als HTML-Datei speichern, die ich später in ein Bild konvertieren kann. Ich mache das, indem ich die Rendermethode überschreibe. Ich möchte jedoch zwei Schaltflächen und eine DropDownList aus der endgültigen Version entfernen, so dass ich nur die Tabelle selbst erhalte. Hier ist der Code, den ich gerade versuche:

protected override void Render(HtmlTextWriter writer)
{
    using (HtmlTextWriter htmlwriter = new HtmlTextWriter(new StringWriter()))
    {
        base.Render(htmlwriter);
        string renderedContent = htmlwriter.InnerWriter.ToString();
        string output = renderedContent.Replace(@"<input type=""submit"" name=""viewReport"" value=""View Report"" id=""viewReport"" />", "");
        output = output.Replace(@"<input type=""submit"" name=""redoEdits"" value=""Redo Edits"" id=""redoEdits"" />", "");

        var doc = new HtmlDocument();
        doc.LoadHtml(output);

        var query = doc.DocumentNode.Descendants("select");
        foreach (var item in query.ToList())
        {
            var newNodeStr = "<div></div>";
            var newNode = HtmlNode.CreateNode(newNodeStr);
            item.ParentNode.ReplaceChild(newNode, item);
        }

        File.WriteAllText(currDir + "\\outputFile.html", output);

        writer.Write(renderedContent);
    }
}

Wo ich diese Lösung in einem anderen SO- Beitrag über das Ersetzen von Knoten mit HtmlAgilityPack angepasst habe:

var htmlStr = "<b>bold_one</b><strong>strong</strong><b>bold_two</b>";
var doc = new HtmlDocument();
doc.LoadHtml(htmlStr);

var query = doc.DocumentNode.Descendants("b");
foreach (var item in query.ToList())
{
    var newNodeStr = "<foo>bar</foo>";
    var newNode = HtmlNode.CreateNode(newNodeStr);
    item.ParentNode.ReplaceChild(newNode, item);
}

und hier ist der gerenderte HTML-Code, den ich ändern möchte:

<select name="Archives" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;Archives\&#39;,\&#39;\&#39;)&#39;, 0)" id="Archives" style="width:200px;">
    <option selected="selected" value="Dashboard_Jul-2012">Dashboard_Jul-2012</option>
    <option value="Dashboard_Jun-2012">Dashboard_Jun-2012</option>
</select>

Die beiden Aufrufe von Replace funktionieren wie erwartet und entfernen die Schaltflächen. Jedoch diese Linie:

var query = doc.DocumentNode.Descendants("select");

wirft diesen Fehler auf:

Method not found: 'Int32 System.Environment.get_CurrentManagedThreadId()'.

Jeder Rat wird geschätzt.

Grüße.

Akzeptierte Antwort

Scheint, als ob Sie die .Net Version 4.5 des Agility Packs in einem Projekt verwenden, das auf .Net oder niedriger abzielt. Sie müssen entweder den Verweis der DLL auf den für Ihre Framework Version kompilierten ändern oder Ihr Projekt auf .Net 4.5 ändern (Wenn Sie VS 2012 verwenden).




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