Как получить внутренний текст с форматированием basi c из кода html - PullRequest
0 голосов
/ 01 февраля 2020

Я знаю, что могу загрузить приведенный ниже текстовый код в документ HtmlAgilityPack и получить внутренний текст

Однако я хотел бы получить внутренний текст в формате basi c. Из формата basi c я имею в виду только 2, которые выделены жирным шрифтом и itali c

Возможно ли получить внутренний текст с таким форматированием basi c?

Вот пример кода

<div class="mw-parser-output"><p><strong class="Latn headword" lang="en">API</strong> (<i>third-person singular simple present</i> <b class="Latn form-of lang-en 3&#124;s&#124;pres-form-of" lang="en"><a href="/wiki/APIs#English" title="APIs">APIs</a></b>, <i>present participle</i> <b class="Latn form-of lang-en pres&#124;ptcp-form-of" lang="en"><a href="/wiki/oning#English" title="oning">oning</a></b>, <i>simple past and past participle</i> <b class="Latn form-of lang-en past&#124;and&#124;past&#124;ptcp-form-of" lang="en"><a href="/wiki/oned#English" title="oned">oned</a></b>) </p> <!-- NewPP limit report Parsed by mw1286 Cached time: 20200201203044 Cache expiry: 2592000 Dynamic content: false Complications: [] CPU time usage: 0.080 seconds Real time usage: 0.124 seconds Preprocessor visited node count: 35/1000000 Preprocessor generated node count: 0/1500000 Post‐expand include size: 1028/2097152 bytes Template argument size: 2/2097152 bytes Highest expansion depth: 5/40 Expensive parser function count: 0/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 0/5000000 bytes Number of Wikibase entities loaded: 0/400 Lua time usage: 0.058/10.000 seconds Lua memory usage: 2.21 MB/50 MB --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 117.762 1 Template:en-verb 100.00% 117.762 1 -total --> </div>

Это выглядит так в браузере

enter image description here

Итак, вывод, который я хотел бы получить, выглядит примерно так

<b>API</b> (<i>third-person singular simple present</i> <b>APIs</b>, <i>present participle</i> <b>oning</b>, <i>simple past and past participle</i> <b>oned</b>)

c#. net 4.8 +

Я пришел к следующему решению, но мне было бы интересно, есть ли более эффективное решение

    HtmlDocument hdDoc = new HtmlDocument();
    hdDoc.LoadHtml(File.ReadAllText("test.txt"));

    var query = hdDoc.DocumentNode.Descendants().OfType<HtmlCommentNode>().ToList();
    foreach (var comment in query)
    {
        comment.Remove();
    }
    List<HtmlNode> lstNodesTobeRemoved = new List<HtmlNode>();
    List<string> lstWhichElementsTobeRemoved = new List<string> { "a", "div","p" };
    List<string> lstWhichAttributesToBeRemoved = new List<string> { "class", "lang" };

    foreach (var vrNode in hdDoc.DocumentNode.Descendants())
    {
        foreach (var vrElementName in lstWhichElementsTobeRemoved)
        {
            if (vrNode.Name==vrElementName)
                lstNodesTobeRemoved.Add(vrNode);
        }

        foreach (var vrAttributeName in lstWhichAttributesToBeRemoved)
        {
            vrNode.Attributes.Remove(vrAttributeName);
        }
    }

    foreach (var item in lstNodesTobeRemoved)
    {
        HtmlNode tempHdNode = hdDoc.DocumentNode.FirstChild;
        bool blRemove = false;
        foreach (var vrNode in hdDoc.DocumentNode.Descendants())
        {
            if(vrNode==item)
            {
                tempHdNode = vrNode;
                blRemove = true;
                break;
            }
        }

        if (blRemove)
            tempHdNode.ParentNode.RemoveChild(tempHdNode, true);
    }

    string srHtml= hdDoc.DocumentNode.OuterHtml;

Вывод мое решение

<strong>API</strong> (<i>third-person singular simple present</i> <b>APIs</b>, <i>present participle</i> <b>oning</b>, <i>simple past and past participle</i> <b>oned</b>)    
...