[Solved] How do I use the same XMLAttribute for multiple properties?


Using Xml Linq :

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

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";

        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Make", typeof(string));
            dt.Columns.Add("Make Attribute", typeof(string));
            dt.Columns.Add("Model", typeof(string));
            dt.Columns.Add("Model Attribute", typeof(string));
            dt.Columns.Add("Year", typeof(string));
            dt.Columns.Add("Year Attribute", typeof(string));

            dt.Rows.Add(new object[] { "Honda", "Common", "H1245", "Cfpd", "1975", "Markel" });
            dt.Rows.Add(new object[] { "Honda", "Common", "H1245", "Cfpd", "1975", "Markel" });
            dt.Rows.Add(new object[] { "Honda", "Common", "H1245", "Cfpd", "1975", "Markel" });
            Vehicle.Serialize(dt, FILENAME);
        }
    }
    public class Vehicle
    {
        public static void Serialize(DataTable dt, string fileName)
        {
            string ident = 
                "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<Vehicles xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
                "</Vehicles>";

            XDocument doc = XDocument.Parse(ident);
            XElement xVehicles = doc.Root;

            foreach (DataRow row in dt.AsEnumerable())
            {
                XElement xVehicle = new XElement("Vehicle", new object[] {
                    new XElement("Make", new object[] {new XAttribute("applicableTo", row.Field<string>("Make Attribute")), row.Field<string>("Make")}),
                    new XElement("Make", new object[] {new XAttribute("applicableTo", row.Field<string>("Model Attribute")), row.Field<string>("Model")}),
                    new XElement("Make", new object[] {new XAttribute("applicableTo", row.Field<string>("Year Attribute")), row.Field<string>("Year")})
                });
                xVehicles.Add(xVehicle);
            }
            doc.Save(fileName);
        }
    }
}

solved How do I use the same XMLAttribute for multiple properties?