我得到了这个代码,其中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”
答案 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
};
}
此外,您希望将Job
类Desc
和JobTitle
属性更改为字符串而不是List<string>
:
public class Job
{
...
public string Desc { get; set; }
public string JobTitle { get; set; }
...
}