繁体   English   中英

如何使用xml序列化器将属性添加到xml

[英]how to add attributes to xml using xml serializer

我有以下代码将保存到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>

如何更改我的代码以添加属性,而不是创建子节点。

您可以使用:

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 */);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM