Как преобразовать InnerText в InnerHtml в элементе управления Webbrowser в C #? - PullRequest
3 голосов
/ 14 марта 2010

Я работаю над редактором WYSIWYG со встроенной проверкой орфографии Hunspell и онлайн выделением слов с ошибками. Я использую элемент управления Webbrowser в качестве обработчика HTML. Это проще проверить текст, чем HTML в веб-браузере, но следуя этому пути, я теряю все HTML-форматирование. Таким образом, вопрос: есть ли способ проверить орфографию body textte и затем преобразовать его в body innerhtml с предыдущим форматированием? (без использования HtmlAgilityPack или Majestic12 или SgmlReader или ZetaHtmlTidy ).

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 14 марта 2010

В отличие от проверки правописания свойства innterText данного элемента, лучшим подходом может быть циклический просмотр дочерних элементов и проверка правописания innerText каждого дочернего элемента.

Этот подход, хотя и ограничивающий проверку орфографии на основе контекста, должен сохранять разметку без изменений.

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

0 голосов
/ 31 января 2013

Я решил проверить орфографию свойства innerText, но при замене любых измененных слов я заменил их в innerHTML. Это было довольно легко, если поменять все слова с ошибками. Просто используйте регулярное выражение, чтобы собрать индексы всех подходящих слов в innerHTML и заменить каждое из них.

Regex wordEx = new Regex(@"[A-Za-z]", RegexOptions.Compiled);
MatchCollection mcol = wordEx.Matches(webEditor.Document.Body.InnerHtml);

foreach (Match m in mcol)
{
  //Basic checking for whether this word is an HTML tag. This is not perfect.
  if (m.Value == e.Word && webEditor.Document.Body.InnerHtml.Substring(m.Index -1, 1) != "<")
  {
    wordIndeces.Add(m.Index);
  }
}

foreach (int curWordTextIndex in wordIndeces)
{
   Word word = Word.GetWordFromPosition(webEditor.Document.Body.InnerHtml, curWordTextIndex);
   string tmpText = webEditor.Document.Body.InnerHtml.Remove(word.Start, word.Length);
   webEditor.Document.Body.InnerHtml = tmpText.Insert(word.Start, e.NewWord);
}

UpdateSpellingForm(e.TextIndex);

При замене одного экземпляра я просто перебрал InnerText, чтобы найти, какой экземпляр необходимо заменить. Затем я просматривал InnerHTML, пока не нашел правильный экземпляр и не заменил его.

...