如何使用基于XSD的数据填充XML对象

时间:2018-02-09 18:04:01

标签: c# xml xsd export

我需要使用XSD将数据导出到XML文件中。有很多示例如何做,但大多数没有显示如何填充实际数据,而是将对象保存为XML。我能找到的那个对我没用。

1)我使用了Agresso http://services.agresso.com/schema/ABWInvoice/2011/11/14/ABWInvoice.html的xsd文件 我已经成功下载并使用xsd.exe命令生成了一个类。

2)我已将此课程添加到我的项目中。 ABWInvoice是complexType元素Invoice的类。 xml可能包含多个发票,因此其maxOccurs设置为" unbounded"。每个Invoice都可以有InvoiceNo元素和Header复杂元素。

3)我已经开始编写代码,并且首先想到我可以使用列表,因为发票的数量是动态的。但是List<ABWInvoice> list = new ABWInvoice();没有工作&#34;无法隐式转换类型&abc.Agresso.ABWInvoice&#39; to&#39; System.Collections.Generic.List&#39;&#34;,所以我决定至少尝试拥有一条记录并从那里开始,但oAgresso.Invoice [0] .Header在运行时失败System.NullReferenceException:&#39;对象引用未设置为对象的实例。&#39;

 private void CreateXMLHeader()
    {
        var oAgresso = new ABWInvoice { };

        oAgresso.Invoice[0] = new ABWInvoiceInvoice
        { InvoiceNo = "1" };
        oAgresso.Invoice[0].Header = new ABWInvoiceInvoiceHeader()
        {
            OrderRef = "5678",
            InvoiceDate = Date.Now
        };




        //var agressoXMLImport = Shared.XMLHelper.ReadXml<ABWInvoice>(@"E:\temp\ABW_Invoice_Test.xml");
        Shared.XMLHelper.SaveXml<ABWInvoice>(oAgresso, @"e:\temp\ABW_Export_Test.xml");

    }

你能告诉我怎么做 1)构建一个动态数组(当我开始构建XML时,我不知道发票的数量; 2)我目前的代码有什么问题?

非常感谢!

1 个答案:

答案 0 :(得分:1)

成员数组需要使用已知大小进行初始化,因此更容易制作List ABWInvoiceInvoice,然后使用add方法将其填充到您的数据中,最后将整个列表分配给您的成员阵列

private void CreateXMLHeader()
    {
        var oAgresso = new ABWInvoice { };
        List<ABWInvoiceInvoice> invlist = new List<ABWInvoiceInvoice>();
        invlist.Add(new ABWInvoiceInvoice { InvoiceNo = "1" ,
        Header= new ABWInvoiceInvoiceHeader()
        {
            OrderRef = "5678",
            InvoiceDate = DateTime.Now
        }
        });
        oAgresso.Invoice = invlist.ToArray();