Squeak.ru - шаблоны программирования

xml данные в набор данных

Я пытаюсь получить эту информацию xml в таблицу. Я попытался прочитать xml в набор данных...

         string myXMLfile = @"..\..\..\BR7.xml";

        //http://tatts.com/pagedata/racing/2011/10/5/BR7.xml
        //http://tatts.com/racing/2011/10/5/BR/7

        DataSet ds = new DataSet();
        try
        {
            ds.ReadXml(myXMLfile);


            for (int i = 0; i < ds.Tables.Count; i++)
            {
                listBox1.Items.Add(ds.Tables[i].TableName);
            }

            dgvRunner.DataSource = ds;
            dgvRunner.DataMember = "Runner";

            dgvWinOdds.DataSource = ds;
            dgvWinOdds.DataMember = "WinOdds";

            dgvPlaceOdds.DataSource = ds;
            dgvPlaceOdds.DataMember = "PlaceOdds";

            dgvFixedOdds.DataSource = ds;
            dgvFixedOdds.DataMember = "FixedOdds";

но я получаю четыре отдельных стола. Runner, WinOdds, PlaceOdds и fixedOdds Как получить всю информацию о Runner в одной таблице?

Вот часть xml...

-<Runner RunnerNo="1" Rtng="93" LastResult="0X1" Form="W" Weight="57.0" Handicap="0" Barrier="10" RiderChanged="N" Rider="P SCHMIDT(A)" Scratched="N" RunnerName="PREACHER BOY">
<WinOdds CalcTime="2011-10-05T16:51:07" LastCalcTime="2011-10-05T16:46:32" Short="N" Lastodds="11.50" Odds="10.70"/>
<PlaceOdds Short="N" Lastodds="3.50" Odds="3.30"/>
-<FixedOdds RaceDayDate="2011-10-05T00:00:00" MeetingCode="BR" RaceNo="07" RunnerNo="01" LateScratching="0" Status="w" OfferName="PREACHER BOY" RetailPlaceOdds="3.3500" RetailWinOdds="12.0000" PlaceOdds="3.3500" WinOdds="12.0000" OfferId="981020"><Book SubEventId="863449" BookStatus="F"/> 
</FixedOdds>
</Runner>
24.02.2013

Ответы:


1

У вас должна быть информация о RunnerNo в каждой таблице (она отсутствует в WinOdd и PlaceOdds), чтобы вы могли связать свои четыре таблицы данных. Вы можете определить RunnerNo как уникальный

После этого вы используете только одно представление сетки и устанавливаете это отношение между четырьмя таблицами данных в качестве DataMember представления сетки.

вот пример того, как должно выглядеть отношение

24.02.2013

2

Я бы предложил подход к перемещению всех атрибутов Runner дочерних атрибутов в коллекцию атрибутов Runner узла. При этом принимаются следующие предположения:

  1. Каждый вложенный элемент в узлах Runner имеет внутри максимум 1 вложенный элемент (т. е. внутри элемента FixedOdds есть только один элемент Book).
  2. Атрибуты будут переименованы путем добавления к ним префикса с именем их исходного узла (атрибут CalcTime в элементе WinOdds будет скопирован в коллекцию атрибутов Runner с именем WinOddsCalcTime)
  3. Вы можете сохранить или удалить дочерние узлы (я решил удалить их в примере кода).

Вот код:

    string myXMLfile = @"xml.xml";

    DataSet ds = new DataSet();

    try
    {

        XmlDocument doc = new XmlDocument();
        doc.Load(myXMLfile);

        var runners = doc.SelectNodes("/Runner");

        foreach (XmlNode runner in runners)
        {
            foreach (XmlNode child in runner.ChildNodes)
            {
                for (int i = 0; i < child.Attributes.Count; i++)
                {
                    var at =doc.CreateAttribute(child.Name + child.Attributes[i].Name);
                    at.Value=child.Attributes[i].Value;
                    runner.Attributes.Append(at);
                }
                if (child.Name == "FixedOdds")
                {
                    foreach (XmlNode book in child.ChildNodes)
                    {
                        for (int i = 0; i < book.Attributes.Count; i++)
                        {
                            var at = doc.CreateAttribute(book.Name + book.Attributes[i].Name);
                            at.Value = book.Attributes[i].Value;
                            runner.Attributes.Append(at);
                        }
                    }
                }

                // delete the attributes and the children nodes
                child.RemoveAll();
            }

            // delete the child noeds
            while (runner.ChildNodes.Count > 0)
            {
                runner.RemoveChild(runner.ChildNodes[0]);
            }
        }


        doc.Save("xml1.xml");

        ds.ReadXml("xml1.xml");

        for (int i = 0; i < ds.Tables.Count; i++)
        {
            listBox1.Items.Add(ds.Tables[i].TableName);
        }

        dgvRunner.DataSource = ds;
        dgvRunner.DataMember = "Runner";

        //dgvWinOdds.DataSource = ds;
        //dgvWinOdds.DataMember = "WinOdds";

        //dgvPlaceOdds.DataSource = ds;
        //dgvPlaceOdds.DataMember = "PlaceOdds";

        //dgvFixedOdds.DataSource = ds;
        //dgvFixedOdds.DataMember = "FixedOdds";
    }
    catch (Exception)
    { }
        }
    }
24.02.2013
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...