1

Need help in parsing the following XML. I am a newbie to Linq to XML. I want to parse all picture data in a single objects array, and I dont seem to find a way,

Here is a sample xml,

<Object type="System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="Form1" children="Controls">
    <Object type="System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="PictureBox1" children="Controls">
        <Property name="TabIndex">0</Property>
        <Property name="Size">206, 152</Property>
        <Property name="ImageLocation">C:\Documents and Settings\Administrator\Desktop\logo2w.png</Property>
        <Property name="Location">41, 68</Property>
        <Property name="TabStop">False</Property>
        <Property name="Name">PictureBox1</Property>
        <Property name="DataBindings">
            <Property name="DefaultDataSourceUpdateMode">OnValidation</Property>
        </Property>
    </Object>
    <Object type="System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="PictureBox2" children="Controls">
        <Property name="TabIndex">0</Property>
        <Property name="Size">206, 152</Property>
        <Property name="ImageLocation">C:\Documents and Settings\Administrator\Desktop\logo2w.png</Property>
        <Property name="Location">42, 68</Property>
        <Property name="TabStop">False</Property>
        <Property name="Name">PictureBox2</Property>
        <Property name="DataBindings">
            <Property name="DefaultDataSourceUpdateMode">OnValidation</Property>
        </Property>
    </Object>    
</Object>

I want to access the value as PictureObjects[0].Location = 41, 68, PictureObjects[1].Location = 42, 68 etc, Can I do it?

I saw several samples where I can create such objects based on the node name, and not based on the nodes attribute value? C# LINQ with XML, cannot extract multiple fields with same name into object

Can someone guide or let me know if its feasible?

Community
  • 1
  • 1
user1069342
  • 31
  • 1
  • 3

1 Answers1

1

You can start with this, code below just select TabIndex and Size properties, obviously adding other would not be a tricky:

 XDocument xdoc = XDocument.Load(@"path to a file or use text reader");
 var tree = xdoc.Descendants("Object").Skip(1).Select(d =>
            new
            {
                Type = d.Attribute("type").Value,
                Properties = d.Descendants("Property")
            }).ToList();

 var props = tree.Select(e =>
    new
    {
        Type = e.Type,
        TabIndex = e.Properties
                    .FirstOrDefault(p => p.Attribute("name").Value == "TabIndex")
                    .Value,
        Size = e.Properties
                .FirstOrDefault(p => p.Attribute("name").Value == "Size")
                .Value
    });
sll
  • 61,540
  • 22
  • 104
  • 156
  • If you think that particular answer is fully covered your question you an accept it by marking as accepted answer or wait few days to see whether better answer come in, then you can put bounty (bonus) to welcome more people to help you. This is a bit of StackOverflow question/answer life cycle – sll Nov 29 '11 at 19:32