今天BOSS有个临时需求,即调用部分数据生成网站对应的GOOGLE XML地图文件,此需求的要点是将类对象(Urlset)序列化成XML文档,话不多说,直接上代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Serialization;
namespace WinformTest
{
public partial class frmLrXmlSiteMap : Form
{
private int _start = 0;
private int _limit = 100;
private int _max = 134985;
private Urlset _list = new Urlset();
public frmLrXmlSiteMap()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//TODO:加载数据
Task.Factory.StartNew(() =>
{
while (_start < _max)
{
try
{
LoadData();
MySerializeXml(_list);
UpdateLogControl(string.Format("XML已生成,Start:{0}.", _start));
Thread.Sleep(2000);
}
catch (Exception ex)
{
UpdateLogControl(string.Format("出错啦:{0}", ex.ToString()));
}
}
});
}
protected void LoadData()
{
_list.urls.Clear();
UpdateLogControl("正在加载TOPIC...");
var sql = string.Format("SELECT topic_alias FROM 表名 WHERE article_total>=3 ORDER BY topic_id LIMIT {0},{1}", _start, _limit);
var ds = MySqlHelper_Lr.Query(sql);
if (ds != null && ds.Tables[0].Rows.Count > 0)
{
_start += _limit;
DataTable dt = ds.Tables[0];
ds.Dispose();
_list.urls = (from x in dt.AsEnumerable()
select (new Url
{
changefreq = "weekly",
loc = string.Format("http://xxxxx.com/topic/{0}", x.Field<string>("topic_alias")),
priority = 0.9
})).ToList();
}
}
public void MySerializeXml(Urlset obj)
{
System.Xml.Serialization.XmlSerializer writer =
new System.Xml.Serialization.XmlSerializer(typeof(Urlset));
StreamWriter file = new System.IO.StreamWriter(
@"c:lr" + StringUtility.getRandomizer(10, true, false, true, true) + ".xml");
writer.Serialize(file, obj);
file.Close();
}
protected void UpdateLogControl(string msg)
{
if (rtxtLog.InvokeRequired)
{
rtxtLog.Invoke(new Action(() =>
{
rtxtLog.AppendText(string.Format("{0}==>>{1}{2}", DateTime.Now, msg, Environment.NewLine));
}));
}
else
{
rtxtLog.AppendText(string.Format("{0}==>>{1}{2}", DateTime.Now, msg, Environment.NewLine));
}
}
}
[Serializable]
public class Url
{
[DefaultValue("")]
[XmlElement("loc")]
public string loc { get; set; }
[XmlElement("changefreq")]
public string changefreq { get; set; }
[XmlElement("priority")]
public double priority { get; set; }
}
[Serializable]
[XmlElement("urlset")]
public class Urlset
{
public Urlset()
{
urls = new List<Url>();
}
[XmlElement("url")]
public List<Url> urls { get; set; }
}
}
由于是临时需求,所以简单得弄了一下,实现中用到了一些自己的类库,就不在这贴出来了。
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册