Как создавать объекты на основе элемента или атрибута - PullRequest
1 голос
/ 28 ноября 2011

Нужна помощь в разборе следующего XML.Я новичок в Linq для XML.Я хочу проанализировать все данные изображения в одном массиве объектов, и я, кажется, не могу найти способ,

Вот пример 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>

Я хочу получить доступ к значению какPictureObjects[0].Location = 41, 68, PictureObjects[1].Location = 42, 68 и т. Д. Могу ли я это сделать?

Я видел несколько примеров, где я могу создавать такие объекты на основе имени узла, а не на основании значения атрибута узла? C # LINQ с XML, не может извлекать несколько полей с одинаковыми именами в объект

Может кто-нибудь направить или сообщить мне, возможно ли это?

1 Ответ

1 голос
/ 28 ноября 2011

Вы можете начать с этого, код ниже, просто выберите свойства TabIndex и Size, очевидно, что добавить другие не составит труда:

 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
    });
...