Запрос значений XML, хранящихся в атрибутах, и импорт в набор данных с использованием C # - PullRequest
0 голосов
/ 26 апреля 2019

Я новичок в C # в целом и новичок в разборе XML. У меня есть поток XML, который я получаю от веб-службы, которая имеет значения в атрибутах, которые я хочу загрузить в свой SQL Server, используя набор данных / datatable. Мне трудно получить данные в структуре, которую я хочу импортировать в SQL.

Я хотел бы вытащить данные (для каждой таблицы) в следующую структуру:

Столбцы: bounce_date cancellation_mailing_instance_id cancellation_message cancellation_date email и т. Д.

Строки: bounce_date "значение" cancellation_mailing_instance_id "значение" cancellation_message "значение" cancellation_date "значение" электронная почта "значение" и т. Д.

Пока все, что я могу сделать, это собрать все данные в строки. Я хотел бы создать заголовки столбцов на основе и т. Д.

... и ряды, основанные на «Значение», «Значение» и т. Д.

Мой XML выглядит следующим образом:

<?xml version="1.0" encoding="ISO-8859-1"?>
<GridResponse xmlns="http://sample.sample.net/aapi/2009/08/">
<Brand id="12345">ACME</Brand>
<User>asample</User>
<Grids>
<Grid type="subscriber">
<Record row="1">
<Fields>
<Field element="bounce_date"/>
<Field element="cancellation_mailing_instance_id"/>
<Field element="cancellation_message"/>
<Field element="cancellation_date">2018-03-21T16:00:25.7670000Z</Field>
<Field element="email"/>
<Field element="is_repeated_bouncer">0</Field>
<Field element="is_unsubscriber">1</Field>
<Field element="modified_date">2018-03-21T16:00:29.6500000Z</Field>
<Field element="service_since_date">2018-03-21T13:45:50.2800000Z</Field>
<Field element="user_id"/>
<Field element="subscriber_upload_id"/>
<Field element="imis_name_id"/>
</Fields>
</Record>
<Record row="2">
<Fields>
<Field element="bounce_date"/>
<Field element="cancellation_mailing_instance_id"/>
<Field element="cancellation_message"/>
<Field element="cancellation_date"/>
<Field element="email">xxxxx@sample.org</Field>
<Field element="is_repeated_bouncer">0</Field>
<Field element="is_unsubscriber">0</Field>
<Field element="modified_date">2018-03-21T14:07:32.1530000Z</Field>
<Field element="service_since_date">2018-03-21T14:07:32.1530000Z</Field>
<Field element="user_id"/>
<Field element="subscriber_upload_id"/>
<Field element="imis_name_id"/>
</Fields>
</Record>
<Record row="3">
<Fields>
<Field element="bounce_date"/>
<Field element="cancellation_mailing_instance_id"/>
<Field element="cancellation_message"/>
<Field element="cancellation_date"/>
<Field element="email">xxxxx2@sample.org</Field>
<Field element="is_repeated_bouncer">0</Field>
<Field element="is_unsubscriber">0</Field>
<Field element="modified_date">2019-04-22T20:03:33.9700000Z</Field>
<Field element="service_since_date">2019-04-22T20:03:33.9700000Z</Field>
<Field element="user_id"/>
<Field element="subscriber_upload_id"/>
<Field element="imis_name_id"/>
</Fields>
</Record>
</Grid>
</Grids>
</GridResponse>

Пока я пробую Linq To XML. Я был бы вечно признателен, если бы кто-то мог предоставить небольшой пример кода, чтобы начать меня! Заранее спасибо.

1 Ответ

0 голосов
/ 26 апреля 2019

Он действительно простой Xml Linq, который читает результаты в словарь

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;

namespace ConsoleApplication110
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            string xml = File.ReadAllText(FILENAME);
            XDocument doc = XDocument.Parse(xml);
            XElement root = doc.Root;
            XNamespace ns = root.GetDefaultNamespace();

            Dictionary<int, List<string>> results = doc.Descendants(ns + "Record")
                .GroupBy(x => (int)x.Attribute("row"), y => y)
                .ToDictionary(x => x.Key, y => y.Descendants(ns + "Field").Select(z => (string)z.Attribute("element")).ToList());
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...