DeSerialize a complex XML file

I am trying to DeSerialize following config.xml file, but the sample code I used from internet does not populate the values of all the elements. Can any one please suggest a code - Best Regards, Pranav

< xml version="1.0" >

<ConfigData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<OrgUnit>

<SheetName>ABC1</SheetName>

<UnitID>123,234</UnitID>

<Level>6</Level>

</OrgUnit>

<OrgUnit>

<SheetName>ABC2</SheetName>

<UnitID>345,048,410,476,739</UnitID>

<Level>7</Level>

</OrgUnit>

<OrgUnit>

<SheetName>ABC3</SheetName>

<UnitID>395</UnitID>

<Level>6</Level>

</OrgUnit>

<OrgUnit>

<SheetName>ABC4</SheetName>

<UnitID>996</UnitID>

<Level>6</Level>

</OrgUnit>

<OrgUnit>

<SheetName>ABC5</SheetName>

<UnitID>439</UnitID>

<Level>6</Level>

</OrgUnit>

<OrgUnit>

<SheetName>ABC6</SheetName>

<UnitID>483</UnitID>

<Level>7</Level>

</OrgUnit>

<OrgUnit>

<SheetName>ABC7</SheetName>

<UnitID>986</UnitID>

<Level>6</Level>

</OrgUnit>

<OrgUnit>

<SheetName>ABC8</SheetName>

<UnitID>035,667</UnitID>

<Level>6</Level>

</OrgUnit>

<OrgUnit>

<SheetName>ABC9</SheetName>

<UnitID>N/A</UnitID>

<Level>N/A</Level>

</OrgUnit>

</Departments>

<WebsiteURL>https://my url</WebsiteURL>

<FileName>Training.xls</FileName>

</ConfigData>



Answer this question

DeSerialize a complex XML file

  • K-DUB C

    Your XML isn't valid from what I can see. You have the Departments ending element but no starting element. Beyond that you really have a ConfigData element which contains one or more OrgUnit elements, a WebsiteURL element and a FileName element.

    If you are using XmlDocument then you can get the single nodes by using SelectSingleNode and the list of multiple nodes through SelectNodes.

    XmlNode root = doc.DocumentElement; //Should be ConfigData
    XmlNode nodeUrl = root.SelectSingleNode("WebsiteURL");
    XmlNode nodeFile = root.SelectSingleNode("FileName");
    XmlNodeList units = root.SelectNodes("OrgUnit");
    foreach(XmlNode unit in units)
    {
    ...
    };

    Michael Taylor - 5/30/06


  • kldsajlsd

    Your SheetNames property is defined to be an array of strings whereas the XML is only going to allow 1 element. You should either modify your property definition to allow a single sheet name or change the XML to support an array of sheet names.

    Michael Taylor - 5/30/06


  • alien-

    Hi Michael,

    The correct XML file is below along with two source code files. The code works but does not populate the values of "SheetName" element.

    Is something wrong in this code

    Regards,

    Pranav

    static void Main(string[] args)

    {

    // parse config file

    System.Console.WriteLine("Reading config file...");

    XmlSerializer xmlIn = new XmlSerializer(typeof(ConfigData));

    FileStream inStream = File.OpenRead("config.xml");

    ConfigData data = new ConfigData();

    try

    {

    data = (ConfigData)xmlIn.Deserialize(inStream);

    }

    finally

    {

    inStream.Close();

    }

    Console.ReadLine();

    }

    //********config.xml*************//

    < xml version="1.0" >

    <ConfigData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <Departments>

    <OrgUnit>

    <SheetName>ABC1</SheetName>

    <UnitID>123,234</UnitID>

    <Level>6</Level>

    </OrgUnit>

    <OrgUnit>

    <SheetName>ABC2</SheetName>

    <UnitID>345,048,410,476,739</UnitID>

    <Level>7</Level>

    </OrgUnit>

    <OrgUnit>

    <SheetName>ABC3</SheetName>

    <UnitID>395</UnitID>

    <Level>6</Level>

    </OrgUnit>

    <OrgUnit>

    <SheetName>ABC4</SheetName>

    <UnitID>996</UnitID>

    <Level>6</Level>

    </OrgUnit>

    <OrgUnit>

    <SheetName>ABC5</SheetName>

    <UnitID>439</UnitID>

    <Level>6</Level>

    </OrgUnit>

    <OrgUnit>

    <SheetName>ABC6</SheetName>

    <UnitID>483</UnitID>

    <Level>7</Level>

    </OrgUnit>

    <OrgUnit>

    <SheetName>ABC7</SheetName>

    <UnitID>986</UnitID>

    <Level>6</Level>

    </OrgUnit>

    <OrgUnit>

    <SheetName>ABC8</SheetName>

    <UnitID>035,667</UnitID>

    <Level>6</Level>

    </OrgUnit>

    <OrgUnit>

    <SheetName>ABC9</SheetName>

    <UnitID>N/A</UnitID>

    <Level>N/A</Level>

    </OrgUnit>

    </Departments>

    <WebsiteURL>https://some</WebsiteURL>

    <FileName>Training.xls</FileName>

    </ConfigData>

    //****************ConfigData.cs******************//

    namespace ClassParser

    {

    /// <summary>

    /// Stores config file data

    /// </summary>

    [Serializable]

    public class ConfigData

    {

    private string[] sheetNames;

    private string fileName;

    private string webURL;

    public ConfigData() { }

    public string[] SheetNames

    {

    get { return sheetNames; }

    set { sheetNames = value; }

    }

    public string WebsiteURL

    {

    get { return webURL; }

    set { webURL = value; }

    }

    public string FileName

    {

    get { return fileName; }

    set { fileName = value; }

    }

    }

    }


  • DeSerialize a complex XML file