我有以下代码将保存到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>
如何更改我的代码以添加属性而不是创建子节点。
答案 0 :(得分: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 */);