powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Хрень при работе с XML и Dataset
19 сообщений из 19, страница 1 из 1
Хрень при работе с XML и Dataset
    #38108076
senglory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
string stmp = "\n<rs:data ItemCount=\"6\" xmlns:rs=\"urn:schemas-microsoft-com:rowset\">\n   <z:row _x041a__x043b__x0438__x0435__x043d__x0442___x043a__x043e__x0434_=\"16440042770нс\" _x0424__x0438__x043b__x0438__x0430__x043b___x041a__x043e__x0434_=\"20706\" _x041a__x043e__x0434_=\"3049\" _x041d__x0430__x0437__x0432__x0430__x043d__x0438__x0435_=\"Татнефть УРС\" BdcIdentity=\"__bg01003300030043009300\" xmlns:z=\"#RowsetSchema\" />\n   <z:row _x041a__x043b__x0438__x0435__x043d__x0442___x043a__x043e__x0434_=\"16440042770нс\" _x0424__x0438__x043b__x0438__x0430__x043b___x041a__x043e__x0434_=\"20706\" _x041a__x043e__x0434_=\"5328\" _x041d__x0430__x0437__x0432__x0430__x043d__x0438__x0435_=\"Розница\" BdcIdentity=\"__bg01005300330023008300\" xmlns:z=\"#RowsetSchema\" />\n   <z:row _x041a__x043b__x0438__x0435__x043d__x0442___x043a__x043e__x0434_=\"16440042770нс\" _x0424__x0438__x043b__x0438__x0430__x043b___x041a__x043e__x0434_=\"20706\" _x041a__x043e__x0434_=\"5353\" _x041d__x0430__x0437__x0432__x0430__x043d__x0438__x0435_=\"Медуница\" BdcIdentity=\"__bg01005300330053003300\" xmlns:z=\"#RowsetSchema\" />\n   <z:row _x041a__x043b__x0438__x0435__x043d__x0442___x043a__x043e__x0434_=\"16440042770нс\" _x0424__x0438__x043b__x0438__x0430__x043b___x041a__x043e__x0434_=\"20706\" _x041a__x043e__x0434_=\"5357\" _x041d__x0430__x0437__x0432__x0430__x043d__x0438__x0435_=\"Оптовик\" BdcIdentity=\"__bg01005300330053007300\" xmlns:z=\"#RowsetSchema\" />\n   <z:row _x041a__x043b__x0438__x0435__x043d__x0442___x043a__x043e__x0434_=\"16440042770нс\" _x0424__x0438__x043b__x0438__x0430__x043b___x041a__x043e__x0434_=\"20706\" _x041a__x043e__x0434_=\"8372\" _x041d__x0430__x0437__x0432__x0430__x043d__x0438__x0435_=\"Артемьев ИП\" BdcIdentity=\"__bg01008300330073002300\" xmlns:z=\"#RowsetSchema\" />\n   <z:row _x041a__x043b__x0438__x0435__x043d__x0442___x043a__x043e__x0434_=\"16440042770нс\" _x0424__x0438__x043b__x0438__x0430__x043b___x041a__x043e__x0434_=\"20706\" _x041a__x043e__x0434_=\"8620\" _x041d__x0430__x0437__x0432__x0430__x043d__x0438__x0435_=\"Шифа\" BdcIdentity=\"__bg01008300630023000300\" xmlns:z=\"#RowsetSchema\" />\n</rs:data>\n";
            XmlDocument xd = new XmlDocument();
            xd.LoadXml(stmp);

            DataSet dsQuery = new DataSet();
            var node = xd.DocumentElement as XmlNode;
            XmlReader reader1 = new XmlNodeReader(node);
            dsQuery.ReadXml(reader1);

var v1 = dsQuery.Tables["row"].Rows[4]["_x041a__x043e__x0434_"];



Последняя строка выдает:
Column '_x041a__x043e__x0434_' does not belong to table row.


Если посмотреть на
Код: c#
1.
dsQuery.Tables["row"].Columns[2].ColumnName



то там видно раскодированное "Код". Ладно, лезу по такому имени.
Код: c#
1.
var v2 = dsQuery.Tables["row"].Rows[4][dsQuery.Tables["row"].Columns[2].ColumnName];



v2 возвращается ПУСТЫМ
Что за хрень? И как ее побороть?
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108186
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
var xml = XDocument.Parse(xmlstring);
XNamespace ns = "#RowsetSchema";
foreach (var element in xml.Descendants().Elements(ns + "row"))
{
string value = element.Attribute("_x041a__x043e__x0434_").Value;
}
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108224
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На LINQ

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
XNamespace rs = "urn:schemas-microsoft-com:rowset";
XNamespace z = "#RowsetSchema";
var doc = XDocument.Parse(xmlstring);
var result = doc.Element(rs + "data")
                .Elements(z + "row")
                .Select(e => new
                {
                    ID = e.Attribute("_x041a__x043e__x0434_").Value,
                    Title = e.Attribute("_x041d__x0430__x0437__x0432__x0430__x043d__x0438__x0435_").Value
                })
                .ToList();
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108360
senglory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Увы, не канает. Потому как мне надо датасет пересоздавать по XMLю с разным списком полей и я его заранее не знаю.
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108372
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sengloryУвы, не канает. Потому как мне надо датасет пересоздавать по XMLю с разным списком полей и я его заранее не знаю.
Какая разница, можно динамически и XML пересоздавать, не вижу принципиальной разницы.
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108388
senglory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот это
Код: c#
1.
2.
3.
4.
5.
.Select(e => new
                {
                    ID = e.Attribute("_x041a__x043e__x0434_").Value,
                    Title = e.Attribute("_x041d__x0430__x0437__x0432__x0430__x043d__x0438__x0435_").Value
                })



предполагает захардкоженые поля. Мне же нужно просто воссоздать датасет, в к-ром можно обратиться к колонке по ее имени и прочитать оттуда значение, а не словить эксепшн или пустую строку.
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108389
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sengloryзахардкоженые поля
Это пример. Тебе никто не мешает динамически пробежаться по нодам XDocument и выцепить "поля" и их "значения"
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108393
senglory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как мне названия колонок доставать? в моем датасете они должны быть произвольными.
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108394
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sengloryА как мне названия колонок доставать? в моем датасете они должны быть произвольными.
Может, наконец, ты почитаешь документацию ?
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108395
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
foreach (var element in xml.Descendants().Elements(ns + "row"))
{
    foreach (var attribute in element.Attributes())
    {
        string field = attribute.Name.LocalName;
        string value = element.Attribute(attribute.Name).Value;
    }
}
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108407
senglory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да это понятно, что ручками можно все разобрать и проставить. Но мне же не надо делать это ручками :) Мне надо заставить фреймворк по максимуму проделать всю грязную работу за меня. Вот в чем затык.
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108412
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял, причем тут фреймворк? Задача - прочитать xml шарепоинта. Ну, ты его прочитал.
А как дальше ты будешь строить UI или что-то еще - другая задача.
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108419
senglory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
этот датасет строится в чужом коде на основе, как ты правильно угадал, данных из шарика. При этом он получается пустым и, соответственно, datagridview , привязаный к нему, рисует мне пустую таблицу. Я хочу понять - что не нравится десериализатору этого датасета и как его десериализовать правильно (но не настолько в лоб ручками).
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108437
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sengloryэтот датасет строится в чужом коде на основе, как ты правильно угадал, данных из шарика.
Мне и гадать не надо, RowsetSchema их родные неймспейсы. А так же BdcIdentity нода - от слова BDC (бизнес дата каталоги в шарепоинте). BDC устаревший термин, сейчас в >= 2010 версиях это называется BCS (бизнес коннективити сервисес).

sengloryПри этом он получается пустым и, соответственно, datagridview , привязаный к нему, рисует мне пустую таблицу. Я хочу понять - что не нравится десериализатору этого датасета и как его десериализовать правильно (но не настолько в лоб ручками).
Я тебе десятый раз говорю - отделяй мух от котлет. Твои datagridview с датасетом идут в топку, так как к задаче чтения XML не относятся. Решая вторую задачу, ты можешь из XDocument динамически получить DataTable, который подсунешь в свой UI. Что не ясно?
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108442
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public DataTable Convert(IEnumerable<XElement> elements)
{
    var table = new DataTable();
    var columns = elements.Attributes().Select(d => d.Name).Distinct().Select(d => new DataColumn(d.LocalName)).ToArray();
    table.Columns.AddRange(columns);

    foreach (var element in elements)
    {
        var row = table.NewRow();
        foreach (var attribute in element.Attributes())
        {
            row[attribute.Name.LocalName] = element.Attribute(attribute.Name).Value;
        }
        table.Rows.Add(row);
    }

    return table;
}



Код: c#
1.
2.
var elements = xml.Descendants().Elements(ns + "row");
DataTable table = Convert(elements);
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108454
senglory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЯ тебе десятый раз говорю - отделяй мух от котлет. Твои datagridview с датасетом идут в топку, так как к задаче чтения XML не относятся. Решая вторую задачу, ты можешь из XDocument динамически получить DataTable, который подсунешь в свой UI. Что не ясно?

Не ясно что такого неправильного там для сериализатора, что он сходит с ума.
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108465
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sengloryМСУЯ тебе десятый раз говорю - отделяй мух от котлет. Твои datagridview с датасетом идут в топку, так как к задаче чтения XML не относятся. Решая вторую задачу, ты можешь из XDocument динамически получить DataTable, который подсунешь в свой UI. Что не ясно?

Не ясно что такого неправильного там для сериализатора, что он сходит с ума.
Всё дело в отсутсвии схемы, датасет гадать на кофейной гуще не умеет.
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108507
senglory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public DataTable Convert(IEnumerable<XElement> elements)
{
    var table = new DataTable();
    var columns = elements.Attributes().Select(d => d.Name).Distinct().Select(d => new DataColumn(d.LocalName)).ToArray();
    table.Columns.AddRange(columns);

    foreach (var element in elements)
    {
        var row = table.NewRow();
        foreach (var attribute in element.Attributes())
        {
            row[attribute.Name.LocalName] = element.Attribute(attribute.Name).Value;
        }
        table.Rows.Add(row);
    }

    return table;
}



Код: c#
1.
2.
var elements = xml.Descendants().Elements(ns + "row");
DataTable table = Convert(elements);



Есть проблема - он атрибут xmlns:z начинает интерпретировать как колонку. Как его отучить от такой глупости?
...
Рейтинг: 0 / 0
Хрень при работе с XML и Dataset
    #38108521
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sengloryЕсть проблема - он атрибут xmlns:z начинает интерпретировать как колонку. Как его отучить от такой глупости?
Не обрабатывай атрибут xmlns:z.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Хрень при работе с XML и Dataset
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]