C # получить текст во всех узлах HTML и заменить их переведенными - PullRequest
0 голосов
/ 15 декабря 2018

Я пишу инструмент, чтобы перевести содержимое файла html в c #.

Я использую HtmlAgilityPack для работы с узлами HTML и YandexTranslateCSharpSdk для перевода текстов. (Я встречался с обоими недавно)

Мой алгоритм получает текст в любом узле HTML и заменяет егос переведенным.

одна проблема состоит в том, что HtmlAgilityPack возвращает все содержимое в теге html, когда я использую node.innerText, а другая в том, что я понятия не имею, чтобы ускорить процесс перевода, когда я получаю текст с узла и перевожуэто с онлайн-инструментом, безусловно, занимает много времени.Код выглядит следующим образом:

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));
                }

Но естьне работает.

...