2016-02-27 88 views
1

添加属性到XML我有下面的代码将保存到XML文件,如何使用XML序列化

private bool CreateAutoGeneratedReportsXML(string ReportName, int ReportId, string ConnectionString, string ReportBQuery, string ReportColName,string starttime,string endtime,string dailytime,bool daily,bool weekly,bool monthly,bool yearly) 
    { 
     string dir = "C:\\ReportManager\\"; 
     string fname="AutoReport.xml"; 
     if (!Directory.Exists(dir)) 
     { 
      Directory.CreateDirectory(dir); 
     } 

     List<AutoReportXML> objAutoReportXML = new List<AutoReportXML>(); 

     XmlSerializer objSerializer = new XmlSerializer(typeof(List<AutoReportXML>)); 
     if(!File.Exists(dir+fname)) 
     { 
      AutoReportXML objx = new AutoReportXML(); 


      objAutoReportXML.Add(new AutoReportXML() { ReportName = ReportName, ReportID = ReportId, ConnectionString = ConnectionString, 
       ReportBQuery = ReportBQuery, ReportColumnName = ReportColName, StartTime = starttime, 
       EndTime = endtime, DailyTime = dailytime, Daily = daily, Weekly = weekly, Monthly = monthly, Yearly = yearly }); 

      using(FileStream fs=new FileStream(dir+fname,FileMode.Create,FileAccess.Write)) 
      { 
       objSerializer.Serialize(fs, objAutoReportXML); 
       fs.Close(); 
      } 
     } 
     else{ 
      using (FileStream fs = new FileStream(dir + fname, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) 
      { 

       objAutoReportXML=objSerializer.Deserialize(fs) as List<AutoReportXML>; 

       if (!objAutoReportXML.Any(x => x.ReportName.Contains(ReportName))) 
       { 
        AutoReportXML objx=new AutoReportXML(); 
        XElement x; 
        if (fs.Position > 0) 
        { 
         fs.Position = 0; 
         x = XElement.Load(fs); 
         x = new XElement("ArrayOfAutoReportXML",         
         new XAttribute("ReportName", ReportName), 
         new XAttribute("ReportID", ReportId), 
         new XAttribute("ConnectionString", ConnectionString), 
         new XAttribute("ReportBQuery", ReportBQuery), 
         new XAttribute("ReportColumnName", ReportColName), 
         new XAttribute("StartTime",starttime), 
         new XAttribute("EndTime",endtime), 
         new XAttribute("DailyTime",dailytime), 
         new XAttribute("Daily",daily), 
         new XAttribute("objx.Weekly",weekly), 
         new XAttribute("Monthly",monthly), 
         new XAttribute("Yearly",yearly)); 


        x.Save(fs); 
        } 



       } 
       else { 

       } 
      } 
      } 
     return true; 
    } 

我的输出上面的代码象下面这样:

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfAutoReportXML ReportName="tff" ReportID="17" ConnectionString="server='KHASIM-PC\SQLEXPRESS';uid='sa';pwd='khasim123';database='ReportMgr'" ReportBQuery="SELECT t0.testid, t0.pt500, t0.pt600, t0.cdt FROM sampletest t0 WHERE t0.cdt BETWEEN @VALUE1 and @VALUE2" ReportColumnName="cdt" StartTime="12:46:50" EndTime="12:46:50" DailyTime="12:46:50" Daily="false" objx.Weekly="false" Monthly="false" Yearly="false" /><?xml version="1.0"?> 
<ArrayOfAutoReportXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" /> 

我想输出如下图所示,添加属性而不是创建子节点:

<?xml version="1.0"?> 
<ArrayOfAutoReportXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <AutoReportXML ReportName="hourslyshifta" ReportID="34" StartTime="10:00:00" EndTime="17:00:00" ... > 
<AutoReportXML ReportName="hourslyshifta" ReportID="34" StartTime="10:00:00" EndTime="17:00:00" ... > 
<AutoReportXML ReportName="somename" ReportID="34" StartTime="10:00:00" EndTime="17:00:00" ... > 
<AutoReportXML ReportName="othername" ReportID="34" StartTime="10:00:00" EndTime="17:00:00" ... > 
<AutoReportXML ReportName="firstname" ReportID="34" StartTime="10:00:00" EndTime="17:00:00" ... > 
<AutoReportXML ReportName="quickreport" ReportID="34" StartTime="10:00:00" EndTime="17:00:00" ... > 

</ArrayOfAutoReportXML> 

如何更改我的代码以添加属性tead创建子节点。

回答

1

您可以使用:

XElement x; 
XAttribute attribute = new XAttribute("AttributeName", object); 
x.Add(attribute); 

或者:

XElement x = new XElement("AutoReportXML", 
    new XAttribute("ReportName", "somename"), 
    new XAttribute("ReportID", 34) 
    /* , add more here */); 
+0

谢谢我得到一个更多错误此行随着每个新节点的创建而增加,你能帮我理解为什么 – Tan

+0

你能更新你的新代码吗?我只能检查我是否看到代码。 – Sakura

+0

我认为部分if(!file.exists)代码需要更新。我已更新代码 – Tan