日期:2014-05-17  浏览次数:20773 次

求教,数组和XML如何互转
数组格式如下
{[张三]|[1001]|[10.2]|[2]|}|{[李四]|[1002]|[11.2]|[2]|}..
XML格式如下:
<data>
 <姓名>张三</姓名>
 <编码>1001</编码>
 <金额>10.2</金额>
 <类型>2</类型>
</data>
<data>
 <姓名>李四</姓名>
 <编码>1002</编码>
 <金额>11.2</金额>
 <类型>2</类型>
</data>
..
如何进行互转呢?万分感谢

------解决方案--------------------
数据量有多少呢?
------解决方案--------------------
这么有规律,直接split...split...split 

只要 [] 里没有 []
------解决方案--------------------
C# code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.IO;

namespace 生成XML文档
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Customers> list = new List<Customers>();
            Customers c1 = new Customers("张三", "1001", 534.78, 2);
            Customers c2 = new Customers("李四", "1002", 345.34, 1);
            list.Add(c1);
            list.Add(c2);
            //list = GetXmlToCustomer(@"C:\Customer.xml");

            XDocument xdoc = GetCustomersToXML(list.ToArray());

            //把获得的XML文档保存到C:\Customer.xml
            File.WriteAllText(@"C:\Customer.xml", xdoc.ToString(), Encoding.UTF8);

            Console.ReadKey();
        }
        /// <summary>
        /// 把Customers[]转换为XDocument
        /// </summary>
        /// <param name="customers">Customers[]数组</param>
        /// <returns>Customers[]数组的XDocument</returns>
        static XDocument GetCustomersToXML(Customers[] customers)
        {
            XDocument xdoc = new XDocument();
            XElement root = new XElement("data");
            foreach (Customers ct in customers)
            {
                XElement xct = new XElement("Customer");
                //姓名节点
                XElement xName = new XElement("姓名");
                xName.Value = ct.Name;
                xct.Add(xName);
                //编号节点
                XElement xNum = new XElement("编号");
                xNum.Value = ct.CustomerNum.ToString();
                xct.Add(xNum);
                //金额节点
                XElement xMoney = new XElement("金额");
                xMoney.Value = ct.Money.ToString();
                xct.Add(xMoney);
                //类型节点
                XElement xType = new XElement("类型");
                xType.Value = ct.CustomerType.ToString();
                xct.Add(xType);
                root.Add(xct);
            }
            xdoc.Add(root);

            return xdoc;
        }

        static List<Customers> GetXmlToCustomer(string customerXmlPath)
        {
            List<Customers> list = new List<Customers>();
            using (Stream st = File.OpenRead(customerXmlPath))
            {
                using (StreamReader sr = new StreamReader(st, Encoding.UTF8))
                {
                    XDocument xdoc = XDocument.Load(sr);
                    XElement root = xdoc.Root;
                    foreach (XElement xe in root.Elements())
                    {
                        Customers ct = new Customers();
                        XElement[] customer = xe.Elements().ToArray();
                        ct.Name = customer[0].Value;
                        ct.CustomerNum = customer[1].Value;
                        ct.Money = Convert.ToDouble(customer[2].Value);
                        ct.CustomerType = Convert.ToInt32(customer[3].Value);
                        list.Add(ct);
                    }
                }
            }
            return list;