Reemplazo de un nodo usando HtmlAgilityPack arrojando un error extraño

c# html html-agility-pack parsing

Pregunta

Tengo una página web que muestra una tabla que el usuario puede editar. Después de realizar las ediciones, quiero guardar la tabla como un archivo .html que puedo convertir a una imagen más adelante. Estoy haciendo esto anulando el método de renderizado. Sin embargo, quiero eliminar dos botones y un DropDownList de la versión final para obtener la tabla por sí mismo. Aquí está el código que estoy intentando actualmente:

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);
    }
}

Donde he adaptado esta solución encontrada en otra publicación SO sobre el reemplazo de nodos con HtmlAgilityPack:

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);
}

Y aquí está el HTML renderizado que estoy tratando de alterar:

<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>

Las dos llamadas a Reemplazar funcionan como se espera y eliminan los botones. Sin embargo esta línea:

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

está lanzando este error:

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

Cualquier consejo es apreciado.

Saludos.

Respuesta aceptada

Parece que está utilizando la versión .Net 4.5 del paquete de agilidad en un proyecto dirigido a .Net o inferior, solo tiene que cambiar la referencia de la DLL a la compilada para su versión de Framework o cambiar su proyecto a .Net 4.5 (Si estás usando VS 2012, eso es).




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué