HtmlAgilityPackを使用したノードの置換奇妙なエラーのスロー

c# html html-agility-pack parsing

質問

私はユーザーが編集できるテーブルを表示するWebページを持っています。編集が行われた後、後でイメージに変換できる.htmlファイルとしてテーブルを保存します。私はこれをレンダリングメソッドをオーバーライドすることでやっています。しかし、私は2つのボタンとDropDownListを最終版から削除して、テーブルを単独で取得したいと考えています。私が現在試しているコードは次のとおりです:

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

ノードをHtmlAgilityPackに置き換えることについて別のSOの記事で見つかったこの解決策を採用したところ:

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

ここに私が変更しようとしているレンダリングされたHTMLがあります:

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

Replaceへの2回の呼び出しは、期待通りに機能し、ボタンを削除します。しかし、この行:

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

このエラーが発生しています:

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

アドバイスをいただければ幸いです。

よろしく。

受け入れられた回答

.Net 4.5以下のバージョンのAgility Packを.Net以下のプロジェクトで使用しているようですが、DllのリファレンスをFrameworkバージョン用にコンパイルしたものに変更するか、プロジェクトを.Net 4.5に変更するだけです(あなたがVS 2012を使用している場合)。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ