将innerHtml保存到字符串列表中

时间:2014-06-14 12:03:14

标签: c# list

我得到了这个代码,其中btag是一个网址列表:

foreach (var link in bTags)
            {
                HtmlDocument htmlDocument = htmlWeb.Load(link);

                var listOfTitles = htmlDocument.DocumentNode.SelectNodes("//div[@id='view-subject']//h1")
                    .Select(o => o.InnerText).ToString();

                //Code to save the node to a list of string

            }

我也有这门课:

 public class Job
    {
        public Job()
        {
            Desc = new list<string>();

            JobTitle = new List<string>();
        }
        public List<string> Desc { get; set; }

        public List<string> JobTitle { get; set; }
}

我打算通过循环遍历btags来创建一个作业对象,选择适当的节点。 foreach选择了我的文档中的所有JobTitles,但是如何将这些值保存到我的Job-object?

提前致谢。

编辑:

List<string> listOfTitles = new List<string>();
            foreach (var link in bTags)
            {
                HtmlDocument htmlDocument = htmlWeb.Load(link);
                //NOTE!: You want to set the o.InnerText to string, not the resulting list. (ive done that in this example)
                var titlesFromCurrentLink = htmlDocument.DocumentNode.SelectNodes("//div[@id='view-subject']//h1").Select(o => o.InnerText.ToString());
                listOfTitles.AddRange(titlesFromCurrentLink);
            }

            foreach(var title in listOfTitles)
            {
                Job newJob = new Job()
                {
                    JobTitle = title;
                };
            }

我在:

上收到错误
JobTitle = title;

它说:无法将源类型“字符串”转换为目标类型“system.collection.geneic.list”

1 个答案:

答案 0 :(得分:2)

对于Job对象列表的结果,每个链接创建一个作业,并且每个作业都有一个作业标题,您的主要问题是该行:

var listOfTitles = htmlDocument.DocumentNode.SelectNodes("//div[@id='view-subject']//h1")
                    .Select(o => o.InnerText).ToString();

.Select()将从您选择的节点(SelectNodes)返回一个innerTexts列表。 你真正想要的是一个单一的标题,并在创建一个工作时使用该标题。看起来更像是:

var titleNode = htmlDocument.DocumentNode.SelectNodes("//div[@id='view-subject']//h1").FirstOrDefault();

此时最好检查一下你确实有一个值得获得的标题 - 如果没有任何结果,FirstOrDefault()将返回null

if( titleNode != null )
{
    string titleText = titleNode.InnerText;
    Job currentJob = new Job()
    {
        JobTitle = titleText
    };
}

此外,您希望将JobDescJobTitle属性更改为字符串而不是List<string>

public class Job
{
...
    public string Desc { get; set; }
    public string JobTitle { get; set; }
...
}