解析html标记中的文本

时间:2016-07-06 17:44:18

标签: c# html

我在传统文本文件中有大约27,000个以下标记条目:

<li class="active-result group-option" data-option-array-index="4">Microsoft Power BI</li>

上面我唯一需要的是(在这种情况下)

  

Microsoft Power BI

使用C#,我尝试了字符串拆分选项(从名为select.txt的文件中读取),但是,我还没有完成此任务。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我知道有人会因为使用xml读取html而给我带来负面影响。但在这种情况下,它运作良好。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = "<li class=\"active-result group-option\" data-option-array-index=\"4\">Microsoft Power BI</li>";
            //use only for reading from string.
            StringReader reader = new StringReader(text);

            List<string> data = new List<string>();
            //for reading from file use XmlReader.Create(filename);
            XmlReader xReader = XmlReader.Create(reader);
            while(!xReader.EOF)
            {
                if(xReader.Name != "li")
                {
                    xReader.ReadToFollowing("li");
                }
                if(!xReader.EOF)
                {
                    data.Add(xReader.ReadInnerXml());
                }
            }
        }
    }
}

答案 1 :(得分:-1)

做这样小事的最理想的方法是正则表达式。

在文件顶部添加:

using System.Text.RegularExpressions;

然后使用此正则表达式捕获所需的所有值

string input = ReadSomethingFromFile(); // input is the raw data you are trying to read
MatchCollection matches = Regex.Matches(input, "<li class=\"active-result group-option\"[^<]+>([^<]+)</li>");

// Loop through all matched elements
forEach(Match m in matches) {
    string capturedString = m.Captures[0].Value;
    // Do something with capturedString
}

如果您计划稍后在程序中添加更多功能,则应使用正确的html解析库。但如果你只是做这件事,正则表达式是最简单的选择。