C#在所有html节点中获取文本并将其替换为已翻译

时间:2018-12-14 22:16:24

标签: c# html parsing translate yandex

我正在写一个工具,也可以在C#中翻译html文件内容。

我正在使用HtmlAgilityPack处理html节点,并使用YandexTranslateCSharpSdk来翻译文本。(我是新遇到的)

我的算法是在任何html节点中获取文本并将其替换为已翻译。

一个问题是,当我使用HtmlAgilityPack时,node.innerText返回了html标记中的所有内容,另外一个问题是,当我从节点获取文本并使用进行翻译时,我不知道要加快翻译过程在线工具肯定需要很多时间。 代码看起来像这样:

foreach (var node in nodes)
        {
            //i++;
            if (string.IsNullOrWhiteSpace(node.InnerText) || string.IsNullOrEmpty(node.InnerText))
                continue;
            var trans = await wrapper.TranslateText(node.InnerText.Replace("\n", "").Trim(), "en-fr");
            if (node.ChildNodes.Count > 0)
            {

                node.ReplaceChild(doc.CreateTextNode(trans), node.ChildNodes.First());
            }
            else
            {
                node.AppendChild(doc.CreateTextNode(trans));
            }

        }

在HtmlAgilityPack中,node.innerText是只读的,不能使用node.innerText="some text"来解决,我使用了以下代码:

if (node.ChildNodes.Count > 0)
                {

                    node.ReplaceChild(doc.CreateTextNode(trans), node.ChildNodes.First());
                }
                else
                {
                    node.AppendChild(doc.CreateTextNode(trans));
                }

但是不行。

0 个答案:

没有答案