Как скопировать поддерево DOM между двумя webbrowser.HmtlDocuments? - PullRequest
1 голос
/ 01 октября 2009

Приложение WinForm. Я хочу очистить часть веб-страницы HTML и сохранить ее в локальном HTML-файле.

У меня есть один локальный файл, "empty.htm" (содержащий только "Я пуст" в теле), одна удаленная веб-страница и два элемента управления WebBrowser. WebBrowser1 переходит на удаленную страницу, WebBrowser2 - в локальный файл. Оба отображают свой контент соответствующим образом.

Теперь я пытаюсь:

            string rootIDToCopy = "InterestingDivID";

            HtmlDocument htmlDocument = webBrowser1.Document;
            HtmlElement rootElementToCopy = 
                             htmlDocument.GetElementById(rootIDToCopy);

            if (rootElementToCopy != null)
            {

                HtmlDocument dest = webBrowser2.Document;
                if (dest != null)
                {
                    HtmlElement destBody = dest.Body;  // Point 1

                    destBody.AppendChild(rootElementToCopy); // Point 2
                }
            }

Теперь, когда я нахожусь в пункте 1, я вижу, что destBody существует, не имеет детей и имеет InnerHTML «Я пустой». rootElementToCopy выглядит допустимым (имеет трех детей и нормальный InnerHtml). Тем не менее, в точке 2 я получаю «Значение не терпит неудачу в ожидаемом диапазоне» (возможно, из Windows.Forms.UnsafeNativeMethods.IHTMLElement2.InsertAdjacentElement).

Помощь будет оценена!

1 Ответ

1 голос
/ 01 октября 2009

Вам может быть запрещено: см. WRONG_DOCUMENT_ERR и ownerDocument в спецификации DOM .

Вместо этого я думаю, что вам, возможно, придется сериализовать поддерево в формат плоской строки, прежде чем пытаться вставить его в другой документ.

...