我需要使用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)我目前的代码有什么问题?
非常感谢!
答案 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();