我目前正在使用HtmlAgilityPack从所有不必要的Tag中删除div的内容(包含contentEditable),因此我只能将文本保留在<p></p>
标记之间。在收到文本后,我将它发送给一个校正器,该校正器在这个特定的<p></p>
内给出了错误的单词。
Dictionary<string, List<string>> DicoError = new Dictionary<string, List<string>>();
int nbError = 0;
HtmlDocument html = new HtmlDocument();
html.LoadHtml(texteAFormater);
var nodesSpan = html.DocumentNode.SelectNodes("//span");
var nodesA = html.DocumentNode.SelectNodes("//div");
if (nodesSpan != null)
{
foreach (var node in nodesSpan)
{
node.Remove();
}
}
if (nodesA != null)
{
foreach (var node in nodesA)
{
if (node.Attributes["edth_type"] != null)
{
if (string.Equals(node.Attributes["edth_type"].Value, "contenu", StringComparison.InvariantCultureIgnoreCase)==false)
{
node.Remove();
}
}
}
}
var paragraphe = html.DocumentNode.SelectNodes("p");
for(int i =0; i< paragraphe.Count; i++){
string texteToCorrect = paragraphe[i].innerText;
List<string> errorInsideParagraph = new List<string>();
errorInsideParagraph = callProlexis(HtmlEntity.DeEntitize(texteToCorrect), nbError, DicoError);
for(int j=0;j<motEnErreur.Count; j++){
HtmlNode spanNode = html.CreateElement("span");
spanNode.Attributes.Add("class", typeError);
spanNode.Attributes.Add("id", nbError);
spanNode.Attributes.Add("oncontextmenu","rightClickMustWork(event, this);return false");
}
}
我设法将innerText发送给我的校正器,我得到的担心是承认我的内部文本为这段:
<p>this is some text <em>error</em> how should this work</p>
在这两个单词出错:error
和should
如何添加spanNode
,以便<em></em>
保持在error
左右? (如果已经存在,那么我需要保留错误单词周围的实际标记,并将spanNode
包裹在其周围。)
所以预期结果将是:
<p>this is some text <span ...><em>error</em></span> how <span ...>should</span> this work</p>
编辑:我正在考虑在innerHtml中找到错误的单词,然后获取该单词的父节点,如果它是<p>
那么他周围没有标记我们可以添加{{ 1}}如果它是另一个标记,那么我们需要添加spanNode
,因为spanNode
的父节点是spanNode
的子节点,但是该单词周围的标记的父节点。我不知道该怎么做。