представление класса файла XML, необходимого с использованием C # 4.0 - PullRequest
0 голосов
/ 14 марта 2012

У меня есть следующий xml-файл, который мне нужно прочитать в мой проект C #, чтобы у меня была коллекция вместе с доступом к атрибутам.Я пробовал несколько попыток, хотя я не очень далеко.Я хотел бы использовать классы для представления xml, который я видел ранее, но не могу воспроизвести.Я не хочу читать файл в потоковом считывателе, а затем извлекать значения.Предыдущий проект, я думаю, использовал атрибут [Serializable] для класса.

Надеюсь, это поможет?Дайте мне знать, если вам нужно больше, я использую C # 4.0.

Спасибо, Джеймс

<MyProducts xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xs="http://www.w3.org/2001/XMLSchema">

<MyProduct MyProductCode="MBB" MyProductCategory="Computer" MyProductMaxNumber = "4">
  <MyProductLookups>
    <MyProductLookup Lang="AAA">Test 1</MyProductLookup>
    <MyProductLookup Lang="BBB">Test 2</MyProductLookup>
    <MyProductLookup Lang="CCC">Test 3</MyProductLookup>
    <MyProductLookup Lang="DDD">Test 4</MyProductLookup>
  </MyProductLookups>
</MyProduct>    
<MyProduct MyProductCode="LJJ" MyProductCategory="Laptop" MyProductMaxNumber = "4">
  <MyProductLookups>
    <MyProductLookup Lang="AAA">Test 5</MyProductLookup>
    <MyProductLookup Lang="BBB">Test 6</MyProductLookup>
    <MyProductLookup Lang="CCC">Test 7</MyProductLookup>
    <MyProductLookup Lang="DDD">Test 8</MyProductLookup>
  </MyProductLookups>
</MyProduct>

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

Сериализуемая вещь работает правильно только при совпадении конвенций.

В последнее время я начал использовать LINQ to Xml все больше и больше, поскольку он позволяет мне делать именно то, что я хочу:

var productsXml = XElement.Load(pathXmlFile);
var products = products.Elements("MyProduct").Select(product
    select new Product
    {
        MyProductCode = (string)product.Attribute("MyProductCode"),
        MyProductCategory = (string)product.Attribute("MyProductCategory"),
        MyProductMaxNumber  = (int)product.Attribute("MyProductMaxNumber "),
        MyProductLookups = product.Elements("MyProductLookups")
            .Elements("MyProductLookup").Select(lookup =>
            {
                new MyProductLookup()
                {
                    Lang = (string)lookup.Attribute("Lang"),
                    Value = (string)lookup
                }
            } 
    }

Таким образом, вы получаете IEnumerable<Product> и можете взять его оттуда.

0 голосов
/ 14 марта 2012

Взгляните на xsd.exe, чтобы сгенерировать схему для вашего XML-файла и классов.

См. Генерация классов из XSD и Использование инструмента XSD для генерации классов изXML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...