using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
public class CustomStockXMLOperate
{
XDocument xdoc;
string filePath;
/// <summary>
/// 加载CustomStock.xml文件
/// </summary>
/// <param name="filePath"></param>
public void LoadXml(string filePath)
{
this.filePath = filePath;
if (!System.IO.File.Exists(filePath))
CreateCustomStockXML(filePath);
xdoc = XDocument.Load(filePath);
}
/// <summary>
/// 加入股票
/// </summary>
/// <returns></returns>
public void AddStock(List<StockObj> stocks)
{
try
{
if (!xdoc.Root.HasElements)
{
foreach (var model in stocks)
{
AddStock(model);
}
}
else
{
foreach (var model in stocks)
{
if (!IsStockExist(model))
AddStock(model);
}
}
xdoc.Save(filePath);
}
catch (Exception ex)
{
Logging.Log.Write("CustomStockXMLOperate.cs-AddStock(List<StockObj> stocks)出错" + ex.ToString(), Logging.LogType.Debug, ex);
}
}
/// <summary>
/// 删除股票
/// </summary>
/// <param name="stocks"></param>
public void DelStock(List<StockObj> stocks)
{
try
{
if (!xdoc.Root.HasElements)
return;
foreach (var item in stocks)
DelStock(item);
xdoc.Save(filePath);
}
catch (Exception ex)
{
Logging.Log.Write("CustomStockXMLOperate.cs-DelStock(List<StockObj> stocks)出错" + ex.ToString(), Logging.LogType.Debug, ex);
}
}
private void CreateCustomStockXML(string filePath)
{
this.filePath = filePath;
xdoc = new XDocument(new XElement("CustomStockRoot"));
xdoc.Save(filePath);
}
private bool IsStockExist(StockObj model)
{
return xdoc.Root.Descendants("Info").Where(x => x.Attribute("StockCode").Value == model.StockCode && x.Attribute("MarketType").Value == model.MarketType.ToString()).Count() > 0 ? true : false;
}
private void AddStock(StockObj model)
{
xdoc.Root.Add(new XElement("Info",
new XAttribute("StockCode", model.StockCode),
new XAttribute("StockName", model.StockName),
new XAttribute("MarketType", model.MarketType.ToString()),
new XAttribute("Type", model.Type.ToString()),
new XAttribute("JoinTime", model.JoinTime.ToString()),
new XAttribute("Note", model.Note))
);
}
private void DelStock(StockObj model)
{
if (!xdoc.Root.HasElements)
return;
var item = xdoc.Root.Elements("Info").Where(x => x.Attribute("StockCode").Value == model.StockCode && x.Attribute("MarketType").Value == model.MarketType.ToString()).Single();
if (item != null)
(item as XElement).Remove();
}
}
使用效果如下:
<?xml version="1.0" encoding="utf-8"?>
<CustomStockRoot>
<Info Code="000001" Name="上证指数" MarketType="SSE" SecurityType="index" SimplePinYinName="" />
<Info Code="399001" Name="深证成指" MarketType="SZSE" SecurityType="index" SimplePinYinName="" />
<Info Code="000004" Name="国农科技" MarketType="SZSE" SecurityType="stock" SimplePinYinName="" />
<Info Code="000001" Name="平安银行" MarketType="SZSE" SecurityType="stock" SimplePinYinName="" />
<Info Code="000002" Name="万科A" MarketType="SZSE" SecurityType="stock" SimplePinYinName="" />
<Info Code="000005" Name="世纪星源" MarketType="SZSE" SecurityType="stock" SimplePinYinName="" />
</CustomStockRoot>
使用LinqToXML增删
最新推荐文章于 2018-04-02 11:53:03 发布