HiveBrain v1.2.0
Get Started
← Back to all entries
patterncsharpMinor

Proper and elegant way of Building a XML Document

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
andwaybuildingxmlelegantdocumentproper

Problem

I need to build the following XML document



5415
1
1
No
1033

Operation No.
Line No.
Date
Comment



Status
3


Prod. Order No.
101006



Routing Reference No
10000




using the following code, it works but is it the proper way of doing it.

```
internal class Field
{
public string Name { get; set; }
public const string FieldName = "Field";
}
internal class Key
{
public string Field { get; set; }
public const string FieldName = "Field";
}

internal class TableFilter
{
public string Field { get; set; }
public string Filter { get; set; }
public const string FieldName = "Field";
public const string FilterName = "FilterName";
}

void Main()
{
//this part is just for the example, obviously, this would be passed as parameter
var tableId = 5415;
var pageSize = 1;
var pageIndex = 1;
var multiCompany = "No";
var language = 1033;

var fields = new List();
fields.Add(new Field() {Name = "Operation No."});
fields.Add(new Field() {Name = "Line No."});
fields.Add(new Field() {Name = "Date"});
fields.Add(new Field() {Name = "Comment"});

var tableFilters = new List();
tableFilters.Add(new TableFilter() {Field = "Status", Filter = "3"});
tableFilters.Add(new TableFilter() {Field = "Prod. Order No.", Filter = "101006"});

var keys = new List();
keys.Add(new Key() {Field = "Routing Reference No"});
keys.Add(new Key() {Field = "10000"});

//End of setup

XDocument doc = new XDocument(new XElement("SFDocument",
new XElement("TableId", tableId),
new XElement("PageSize", pageSize),
new XElement("PageIndex", pageIndex),
new XElement("MultiCompany", multiCo

Solution

I ended up changing my approach and went with a serialize method:

public static class SerializationHelper
{
    internal static string SerializeObject(this T toSerialize)
    {
        var xmlSerializer = new XmlSerializer(toSerialize.GetType());
        var textWriter = new StringWriter();
        xmlSerializer.Serialize(textWriter, toSerialize);
        return textWriter.ToString();
    }
}
[Serializable]
public class SFDocument
{
    public int TableId { get; set; }
    public int PageSize { get; set; }
    public int PageIndex { get; set; }
    public string MultiCompany { get; set; }
    public int Language { get; set; }

        [XmlArrayItem("Field")]
        public List Fields { get; set; }

        public List TableFilters { get; set; }

        [XmlArrayItem("Field")]
        public List Key { get; set; }
        public SFDocument(): this(5415, 1, 1, "No", 1033){}

        public SFDocument(int tableId, int pageSize, int pageIndex, string multiCompany, int language)
        {
            TableId = tableId;
            PageSize = pageSize;
            PageIndex = pageIndex;
            MultiCompany = multiCompany;
            Language = language;

            Fields = new List();
            Key = new List();
            TableFilters  = new List();
        }
}   

[Serializable]
public class TableFilter
{
    public string Field { get; set; }
    public string Filter { get; set; }

    public TableFilter() {}

    public TableFilter(string field, string filter)
    {
        Field = field;
        Filter = filter;
    }
}

void Main()
{
    var sfd = new SFDocument();
    sfd.Fields.Add("Field1");
    sfd.Fields.Add("Field2");
    sfd.Fields.Add("Field3");
    sfd.Fields.Add("Field4");

    sfd.Key.Add("Key1");
    sfd.Key.Add("Key2");
    sfd.Key.Add("Key3");

    sfd.TableFilters.Add(new TableFilter("field1", "filter1"));
    sfd.TableFilters.Add(new TableFilter("field2", "filter2"));
    sfd.TableFilters.Add(new TableFilter("field3", "filter3"));
    sfd.SerializeObject().Dump();
}

Code Snippets

public static class SerializationHelper
{
    internal static string SerializeObject<T>(this T toSerialize)
    {
        var xmlSerializer = new XmlSerializer(toSerialize.GetType());
        var textWriter = new StringWriter();
        xmlSerializer.Serialize(textWriter, toSerialize);
        return textWriter.ToString();
    }
}
[Serializable]
public class SFDocument
{
    public int TableId { get; set; }
    public int PageSize { get; set; }
    public int PageIndex { get; set; }
    public string MultiCompany { get; set; }
    public int Language { get; set; }

        [XmlArrayItem("Field")]
        public List<string> Fields { get; set; }

        public List<TableFilter> TableFilters { get; set; }

        [XmlArrayItem("Field")]
        public List<string> Key { get; set; }
        public SFDocument(): this(5415, 1, 1, "No", 1033){}

        public SFDocument(int tableId, int pageSize, int pageIndex, string multiCompany, int language)
        {
            TableId = tableId;
            PageSize = pageSize;
            PageIndex = pageIndex;
            MultiCompany = multiCompany;
            Language = language;

            Fields = new List<string>();
            Key = new List<string>();
            TableFilters  = new List<TableFilter>();
        }
}   

[Serializable]
public class TableFilter
{
    public string Field { get; set; }
    public string Filter { get; set; }

    public TableFilter() {}

    public TableFilter(string field, string filter)
    {
        Field = field;
        Filter = filter;
    }
}

void Main()
{
    var sfd = new SFDocument();
    sfd.Fields.Add("Field1");
    sfd.Fields.Add("Field2");
    sfd.Fields.Add("Field3");
    sfd.Fields.Add("Field4");

    sfd.Key.Add("Key1");
    sfd.Key.Add("Key2");
    sfd.Key.Add("Key3");

    sfd.TableFilters.Add(new TableFilter("field1", "filter1"));
    sfd.TableFilters.Add(new TableFilter("field2", "filter2"));
    sfd.TableFilters.Add(new TableFilter("field3", "filter3"));
    sfd.SerializeObject().Dump();
}

Context

StackExchange Code Review Q#36238, answer score: 4

Revisions (0)

No revisions yet.