【发布时间】:2016-10-22 16:07:47
【问题描述】:
我正在尝试从 URL 读取 XML 提要并将其存储在数据库中。 XML 格式如下所示:
<response version="2">
<totalresults>1249943</totalresults>
<results>
<result>
<jobtitle>Call Center </jobtitle>
<company>CVS Health</company>
<city>Work at Home</city>
</result>
<result>
<jobtitle>Java Programmer</jobtitle>
<company>Jonah Group</company>
<city>Toronto</city>
</result>
</results>
</response>
我正在尝试存储所有工作的职位名称、公司和城市。有数以百万计的工作。这是我在 C# 中的代码
public override void getJobsFromSource()
{
string url = @"http://api.indeed.com/ads/apisearch?publisher=5566998848654317&v=2&q=%22%22&filter=1%22%22&limit=25";
XmlDocument doc = new XmlDocument();
doc.Load(url);
int totalResults = int.Parse(doc.SelectSingleNode("response /totalresults").InnerText);
for (int i = 0; i < totalResults; i += 25)
{
string newUrl = $@"http://api.indeed.com/ads/apisearch?publisher=5566998848654317&v=2&q=%22%22&filter=1&limit=25&start={i}";
doc.Load(newUrl);
DataSet ds = new DataSet();
XmlNodeReader xmlReader = new XmlNodeReader(doc);
while (xmlReader.ReadToFollowing("results"))
{
ds.ReadXml(xmlReader);
}
if (ds.Tables.Count > 0)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "data source=10.0.0.76;initial catalog=JobSearchDB;persist security info=True;user id=sa;password=bonddbl07;MultipleActiveResultSets=True;App=EntityFramework";
con.Open();
SqlBulkCopy sbc = new SqlBulkCopy(con);
sbc.DestinationTableName = "IndeedJob";
sbc.ColumnMappings.Clear();
sbc.ColumnMappings.Add("jobtitle", "jobtitle");
sbc.ColumnMappings.Add("company", "company");
sbc.ColumnMappings.Add("city", "city");
sbc.WriteToServer(ds.Tables[0]);
con.Close();
}
}
}
问题是,虽然工作是独一无二的,但我的表格中有很多重复项。每当我运行程序时,重复项都会以随机数出现。哪里出错了?
【问题讨论】:
-
使用网络浏览器访问 url。您只使用公司经常在同一标题下发布许多职位的职位。使用 jobkey 获取每个发布的唯一编号。
-
我没有在我的问题中显示所有标签。标签之一是
并且是唯一的。事实上,网站为每个工作分配了一个唯一的密钥。但是在我的表中,我看到许多具有相同工作密钥的重复项。