C #: HtmlAgilityPack извлечь внутренний текст - PullRequest
7 голосов
/ 07 мая 2010

Я использую HtmlAgilityPack. Есть ли однострочный код, который я могу получить весь внутренний текст HTML, например, удалить все теги HTML и сценарии?

Ответы [ 2 ]

16 голосов
/ 07 мая 2010

Как это:

document.DocumentNode.InnerText

Обратите внимание, что при этом будет возвращено текстовое содержимое тегов <script>.

Чтобы это исправить, вы можете удалить все теги <script>, например:

foreach(var script in doc.DocumentNode.Descendants("script").ToArray())
    script.Remove();
foreach(var style in doc.DocumentNode.Descendants("style").ToArray())
    style.Remove();
1 голос
/ 24 февраля 2012

Я написал простой метод. Это может помочь вам. Этот метод может извлечь весь конкретный узел тега. Затем вы можете использовать HtmlNodeCollection[i].InnerText, чтобы получить его текст.

    HtmlDocument hDoc;
    HtmlNodeCollection nodeCollection;

    public void InitInstance(string htmlCode) {
        hDoc.LoadHtml(htmlCode);
        nodeCollection = new HtmlNodeCollection();
    }
    private void GetAllNodesInnerTextByTagName(HtmlNode node, string tagName) {
        if (null == node.ChildNodes) {
            return ;
        } else {
            HtmlNodeCollection nCollection = node.SelectNodes( tagName );
            if( null != nCollection ) {
                for( int i=0; i<nCollection.Count; i++) {
                    nodeCollection.Add( nCollection[i]);
                    nCollection[i].Remove();
                }
            }
            nCollection=node.ChildNodes;
            if(null != nCollection) {
                for(int i=0;i<nCollection.Count; i++) {
                    GetAllNodesInnerTextByTagName( nCollection[i] , tagName );
                }
            }
        }
...