2010-03-13 74 views
3

我正在使用內置拼寫檢查器Hunspell的所見即所得編輯器和在線突出顯示拼寫錯誤的單詞。我使用Webbrowser控件作爲html處理程序。在webbrowser控件中,這是一種很容易拼寫檢查文本的方式,但是遵循這種方式我會丟失所有html格式。 所以問題是:是否有任何方法來拼寫檢查正文innertext文件,然後將其轉換爲以前的格式正文innerhtml? (不使用HtmlAgilityPackMajestic12SgmlReaderZetaHtmlTidy)。如何將InnerText轉換爲C#中的Webbrowser控件中的InnerHtml?

在此先感謝。

+0

你可以發表一個代碼示例,當你使用所述控件時,結果是什麼,失去格式? – 2010-03-13 22:38:46

+0

我正在使用來自hunspell網站的示例代碼片段。我可以突出顯示拼寫錯誤的單詞,但是我不能在innerhtml中做到這一點,而不會丟失它的格式。說實話,解析和拼寫檢查innerhtml是一個屁股疼痛(選擇包裹在標籤中的單詞,在另一個標籤中拼寫拼寫錯誤的單詞以突出顯示它們,還有一個單詞可以用幾個標籤分隔)。這就是爲什麼我問的簡單方法將HTML轉換爲文本。 – 2010-03-13 23:09:02

回答

1

與之相對檢查給定元素的innterText屬性的拼寫,更好的方法可能是遍歷子元素,並檢查每個孩子的innerText而不是拼寫。

這種方法儘管可能限制基於上下文的拼寫檢查,但應該保持標記不變。

注:你可能要考慮到每個子節點可以包含的兒童。

0

我選擇檢查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循環,直到找到正確的實例並將其替換。

相關問題