2016-02-27 98 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