列表中的嵌套XML,包含多行所需的数据

时间:2016-04-13 15:08:27

标签: c# xml list

我需要从列表中将XML格式化为给定的层次结构(List<>)。对于银行信息,该列表包含分布在多行中的数据,如图所示。

enter image description here

XML输出需要格式化如下:

<ROOT>
  <DocumentElement>
    <Supplier>
      <Company>STV</Company>
      <Code>000199</Code>
      <Name>TrafTrans</Name>
      <BankAccounts>
        <SupplierBankAccount>
          <Bban>220-012510-63</Bban>
          <Name>B1</Name>
        </SupplierBankAccount>
        <SupplierBankAccount>
          <Bban>RUIL</Bban>
          <Name>RUIL</Name>
        </SupplierBankAccount>
      </BankAccounts>
      <SupplierAddresses>
        <SupplierAddress>
          <Type>PostalAddress</Type>
          <Name>Loc TrafTrans</Name>
          <IsDefault>true</IsDefault>
          <AddressParts>
            <SupplierAddressPart>
              <AddressPartKey>STREET_NAME</AddressPartKey>
              <AddressPartText>Somewhere</AddressPartText>
            </SupplierAddressPart>
            <SupplierAddressPart>
              <AddressPartKey>COUNTRY</AddressPartKey>
              <AddressPartText>SPAIN</AddressPartText>
            </SupplierAddressPart>
          </AddressParts>
        </SupplierAddress>
      </SupplierAddresses>
    </Supplier>
  </DocumentElement>
</ROOT>

我已经有了一个将列表转换为XML并返回字符串的方法。但问题是,这只会从列表中格式化一个项目,并且在以下项目中可能会有其他信息。

public static string SuppliersToXML(List<SupplierItem> supplier)
{
    CultureInfo ci = new CultureInfo("en-US");
    XmlDocument doc = new XmlDocument();
    var root = doc.CreateElement("ROOT");
    var rootNode = doc.AppendChild(root);
    var docElem = doc.CreateElement("DocumentElement");
    var docElemNode = rootNode.AppendChild(docElem);

    foreach (var item in supplier)
    {
        var supplierElem = doc.CreateElement("Supplier");
        var companyElem = (XmlNode)doc.CreateElement("Company");
        companyElem.InnerText = item.Company.ToString();
        //more code...

        supplierElem.AppendChild(companyElem);
        //more code...
        }
    return doc.OuterXml;
}

1 个答案:

答案 0 :(得分:0)

我自己找到了答案,它可能不是有史以来最漂亮的代码。但它确实起到了作用。

    public async Task<bool> UploadFromGUI(string user, string service, int orderId, string filepath)
    {
        DateTime now = DateTime.Now;
        dbx = new DropboxClient(login_key);

        string path = "/files/" + user + "/" + service + "/order - " + orderId + "/received";
        string fileName = now.Year + "" + now.ToString("MM") + "" + now.ToString("dd") + "" + Path.GetExtension(filepath);

        try
        {
            using (var mem = new MemoryStream(File.ReadAllBytes(filepath)))
            {
                var updated = await dbx.Files.UploadAsync(
                    path + "/" + fileName,
                    WriteMode.Overwrite.Instance,
                    body: mem);
                return true;
            }
        }
        catch
        {
            return false;
        }
    }

{

public static string SuppliersToXML(List<SupplierItem> supplier)

}