项目中用到关于xml文件读写操作,保存数据较少,目前仅用简单的方法实现(XmlDocument),另外两种方法:以后再添加:XmlTextReader和Linq to Xml。
1保存xml数据
private void savexml_Click(object sender, EventArgs e)
{
///bbj 2019-5-14
///将panel容器中的控件保存到xml文件中
///
XmlDocument ledConfigDoc = new XmlDocument();//建立XmlDocument对象
string filepath = Environment.CurrentDirectory;//获取当前路径
filepath += "\\LedxmlConfig.xml";
ledConfigDoc.Load(filepath);//加载xml文件
ledConfigDoc.LoadXml(" ");//覆盖保存
XmlNode root = ledConfigDoc.SelectSingleNode("ledconfig");//建立跟节点
XmlElement xeKey = ledConfigDoc.CreateElement("config");//创建子节点,并且设置子节点的属性
XmlAttribute xeType = ledConfigDoc.CreateAttribute("Type");
xeType.InnerText = "form";
xeKey.SetAttributeNode(xeType);
XmlAttribute xeType2 = ledConfigDoc.CreateAttribute("subtype");
xeType2.InnerText = "form";
xeKey.SetAttributeNode(xeType2);
XmlElement xeformX = ledConfigDoc.CreateElement("formX");//创建子节点
xeformX.InnerText = panel.Tag.ToString();
xeKey.AppendChild(xeformX);
XmlElement xeformY = ledConfigDoc.CreateElement("formY");
xeformY.InnerText = panel.TabIndex.ToString();
xeKey.AppendChild(xeformY);
XmlElement xeformWidth = ledConfigDoc.CreateElement("formWidth");
xeformWidth.InnerText = panel.Width.ToString();
xeKey.AppendChild(xeformWidth);
XmlElement xeformHeight = ledConfigDoc.CreateElement("formHeight");
xeformHeight.InnerText = panel.Height.ToString();
xeKey.AppendChild(xeformHeight);
root.AppendChild(xeKey);//挂载父节点
//保存面板中所有标签的配置
foreach (Control ctro in this.panel.Controls)//将容器中的控件遍历保存配置到xml文件,每个控件作为一个节点
{
XmlElement xeKeytmp = ledConfigDoc.CreateElement("config");
XmlAttribute xeTypetmp = ledConfigDoc.CreateAttribute("Type");
XmlAttribute xesubTypetmp = ledConfigDoc.CreateAttribute("subtype");
XmlElement xelabelX = ledConfigDoc.CreateElement("labelX");
XmlElement xelabelY = ledConfigDoc.CreateElement("labelY");
XmlElement xelabelWidth = ledConfigDoc.CreateElement("labelWidth");
XmlElement xelabelHeight = ledConfigDoc.CreateElement("labelHeight");
XmlElement xelabelFontStr = ledConfigDoc.CreateElement("labelFontStr");
XmlElement xelabelFontSize = ledConfigDoc.CreateElement("labelFontSize");
XmlElement xelabelFontStyle = ledConfigDoc.CreateElement("labelFontStyle");
XmlElement xelabelForeColor = ledConfigDoc.CreateElement("labelForeColor");
XmlElement xelabelText = ledConfigDoc.CreateElement("labelText");
xeTypetmp.InnerText = "label";
xeKeytmp.SetAttributeNode(xeTypetmp);
xesubTypetmp.InnerText = ctro.Tag.ToString();
xeKeytmp.SetAttributeNode(xesubTypetmp);
xelabelX.InnerText = ctro.Location.X.ToString();
xeKeytmp.AppendChild(xelabelX);
xelabelY.InnerText = ctro.Location.Y.ToString();
xeKeytmp.AppendChild(xelabelY);
xelabelWidth.InnerText = ctro.Width.ToString() ;
xeKeytmp.AppendChild(xelabelWidth);
xelabelHeight.InnerText = ctro.Height.ToString();
xeKeytmp.AppendChild(xelabelHeight);
xelabelFontStr.InnerText = ctro.Font.FontFamily.Name;
xeKeytmp.AppendChild(xelabelFontStr);
xelabelFontSize.InnerText = ctro.Font.Size.ToString();
xeKeytmp.AppendChild(xelabelFontSize);
xelabelFontStyle.InnerText = ctro.Font.Style.ToString();
xeKeytmp.AppendChild(xelabelFontStyle);
xelabelForeColor.InnerText = ctro.ForeColor.Name;
xeKeytmp.AppendChild(xelabelForeColor);
xelabelText.InnerText = ctro.Text;
xeKeytmp.AppendChild(xelabelText);
root.AppendChild(xeKeytmp);
}
ledConfigDoc.Save(filepath);//保存xml文件
}
XmlDocument doc;
#region
///
///bbj 2019-5-14
///防止xml中的注释对读取文档有影响
doc = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;//忽略文档中的注释
string filepath = Environment.CurrentDirectory;
filepath += "\\LedxmlConfig.xml";
XmlReader reader = XmlReader.Create(filepath, settings);
doc.Load(reader);
#endregion
XmlNode xn = doc.SelectSingleNode("ledconfig");//得到根节点
XmlNodeList xnl = xn.ChildNodes;//得到根节点下所有的子节点
LedFormConfig lfc = new LedFormConfig();
List labelList = new List();
LedLabelControls labelTmp = null;
foreach (XmlNode xnode in xnl)
{
//xmlclass bookclass = new xmlclass();
XmlElement xe = (XmlElement)xnode;
string str = xe.GetAttribute("Type").ToString();
XmlNodeList xnlist = xe.ChildNodes;
if(str == "form")
{
lfc.formX =Convert.ToInt32(xnlist.Item(0).InnerText);
lfc.formY = Convert.ToInt32(xnlist.Item(1).InnerText);
lfc.formWidth = Convert.ToInt32(xnlist.Item(2).InnerText);
lfc.formHeight = Convert.ToInt32(xnlist.Item(3).InnerText);
}
if (str == "label")
{
labelTmp = new LedLabelControls();
labelTmp.labelX = Convert.ToInt32(xnlist.Item(0).InnerText);
labelTmp.labelY = Convert.ToInt32(xnlist.Item(1).InnerText);
labelTmp.labelWidth = Convert.ToInt32(xnlist.Item(2).InnerText);
labelTmp.labelHeight = Convert.ToInt32(xnlist.Item(3).InnerText);
labelTmp.labelFontStr = xnlist.Item(4).InnerText;
labelTmp.labelFontSize = Convert.ToInt32(xnlist.Item(5).InnerText);
labelTmp.labelFontStyle = xnlist.Item(6).InnerText;
labelTmp.labelForeColor = xnlist.Item(7).InnerText;
labelTmp.labelText = xnlist.Item(8).InnerText;
labelTmp.labelTag = xe.GetAttribute("subtype").ToString();
labelList.Add(labelTmp);
}
}
reader.Close();//读取xml文件结束
。。。。后续操作。。。